iT邦幫忙

0

使用Unity製作出的WebGL程式怎麼匯出xlsx檔(Excel)

  • 分享至 

  • xImage

請問各位大大

我在Unity製作一個WebGL檔想要使他匯出xlsx檔(Excel)

使用的是EPPlus套件

我的原始碼的函數如下

using System;
using System.Text;
using UnityEngine;

public void ConvertJsonToXlsxAndTriggerDownload(string jsonData)
{
    var data = JsonConvert.DeserializeObject<VoltageData>(jsonData);

    using (var package = new ExcelPackage())
    {
        var worksheet = package.Workbook.Worksheets.Add("Sheet1");

        worksheet.Cells[1, 1].Value = "Date";
        worksheet.Cells[1, 2].Value = "MeterID";
        worksheet.Cells[1, 3].Value = "Hour";
        worksheet.Cells[1, 4].Value = "Voltage";

        int row = 2;

        foreach (var record in data.Records)
        {
            string date = record.Date;

            foreach (var meterVoltage in record.MeterVoltages)
            {
                string meterId = meterVoltage.MeterID;

                if (meterVoltage.HourlyVoltages != null)
                {
                    foreach (var hourlyVoltage in meterVoltage.HourlyVoltages)
                    {
                        worksheet.Cells[row, 1].Value = date;
                        worksheet.Cells[row, 2].Value = meterId;
                        worksheet.Cells[row, 3].Value = $"{hourlyVoltage.Hour}:00";
                        worksheet.Cells[row, 4].Value = hourlyVoltage.Voltage;

                        row++;
                    }
                }
            }
        }

        // Convert Excel file to Base64 string
        byte[] fileData = package.GetAsByteArray();
        string base64String = Convert.ToBase64String(fileData);

        // JavaScript code to trigger download
        string jsFunction = $@"
            function triggerFileDownload(fileName, base64Data) {{
                function base64ToBlob(base64, type = 'application/octet-stream') {{
                    const binaryString = atob(base64);
                    const len = binaryString.length;
                    const bytes = new Uint8Array(len);
                    for (let i = 0; i < len; i++) {{
                        bytes[i] = binaryString.charCodeAt(i);
                    }}
                    return new Blob([bytes], {{ type }});
                }}

                const blob = base64ToBlob(base64Data, 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
                const link = document.createElement('a');
                link.href = URL.createObjectURL(blob);
                link.download = fileName;
                document.body.appendChild(link);
                link.click();
                document.body.removeChild(link);
            }}
            triggerFileDownload('{fileName}', '{base64String}');
        ";

        Application.ExternalEval(jsFunction);
    }

    Debug.Log("Excel file has been converted and download triggered.");
}

但是丟到Apache Server執行會出現下列錯誤如下

https://ithelp.ithome.com.tw/upload/images/20240820/20102916ZYJJQ8jRUN.jpg

可以請問該如何解決嗎??

非常感謝!

froce iT邦大師 1 級 ‧ 2024-08-20 15:00:07 檢舉
WebGL跑在瀏覽器上,瀏覽器根本建不出新文件,是要怎麼解決?
你要在後端伺服器上產出excel再傳stream到前端去做下載啦。
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

0
YC
iT邦好手 1 級 ‧ 2024-08-27 10:20:40

錯誤不是跟你說了namenull!
你提供的程式,沒有任何name的相關信息。

不過看你的JS,也沒有定義任何fileName

我要發表回答

立即登入回答