使用 javascript 将 xlsx(字节数组)转换为 csv(字符串)

Convert xlsx (byte array) to csv(string) with javascript

我来自 c#,所以对 java 脚本一无所知。 我有 excel 文件 (xlsx),我将其红色转换为字节数组(在 webGL 构建中使用 unity3d c#),并希望将其发送到 java 脚本函数中,该脚本函数将其解析为 csv 结构和 return作为字符串。 因此,问题部分仅与 java 脚本有关,该脚本接收 xlsx 作为字节数组(或来自内存流的任何类型)和 return csv 作为字符串。 我需要那个功能。我还需要什么(库)? (更新) java脚本代码是

MyConverterXlsxToCsvReturn: function (array,size) {

    var buffer = new ArrayBuffer(size);
    for (var i = 0; i < size; i++)
        buffer[i] =  HEAPU8[array + i];       
    
    var txt = XLSX.utils.sheet_to_txt(buffer, {type: 'arraybuffer'});

    window.alert(Pointer_stringify(txt));
    window.alert(Pointer_stringify(txt.length));

    var returnStr = Pointer_stringify(txt);
    var bufferSize = lengthBytesUTF8(returnStr) + 1;
    var buffer = _malloc(bufferSize);
    stringToUTF8(returnStr, buffer, bufferSize);
    return buffer;
},

我正在尝试发送 byte[] 并转换为 arraybuffer,但正在寻找正确的方法来做到这一点。 现在该函数 return 空字符串。

我想转换我在 C# 中收到的字节数组,然后在 javascript 中将数组红色化。 作为解决方案,我使用方法将字节数组转换为十六进制字符串:

private string ByteArrayToString(byte[] ba)
    {
        StringBuilder hex = new StringBuilder(ba.Length * 2);
        foreach (byte b in ba)
            hex.AppendFormat("{0:x2}", b);
        return hex.ToString();
    }

然后我将这个字符串发送到 javascript 函数并转换为数组。结果返回为字符串:

ExcelHexToCSV: function (hexStr) {
    console.log("javascript: ExcelHexToCSV");
    console.log("javascript received: " + Pointer_stringify(hexStr));

    // convert part
    var str = Pointer_stringify(hexStr);
    var a = [];
    for (var i = 0, len = str.length; i < len; i += 2) {
        a.push(parseInt(str.substr(i, 2), 16));
    }
    var data = new Uint8Array(a);
    console.log("javascript hex_to_byte:" + data);

    // excel part
    var workbook = XLSX.read(data, {type: "array"});
    var sheetname = workbook.SheetNames[0];
    console.log("javascript sheetname:  " + sheetname);
    var sheetdata = XLSX.utils.sheet_to_csv(workbook.Sheets[sheetname]);
    console.log("javascript sheetdata: = " + sheetdata);

    var rezult = sheetdata;

    var returnStr = rezult;
    var bufferSize = lengthBytesUTF8(returnStr) + 1;
    var buffer = _malloc(bufferSize);
    stringToUTF8(returnStr, buffer, bufferSize);
    return buffer;
},

Github link for the my example project