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

橙三吉。 提交于 2021-02-11 12:45:34

问题


I am from c# so know nothing about java script. I have excel file (xlsx) that I red into byte array (with unity3d c# in webGL build) and want to send it into java script function that parse it into csv structure and return as string. So the question part is only related to java script that received xlsx as byte array(or any type from memory stream) and return csv as string. I need that function. What else (libs) do I need for that? (Update) The javascript code is

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;
},

I am trying to send byte[] and convert into arraybuffer but in search of correct way to do that. For now that function return empty string.


回答1:


I wanted to convert byte array that I received in C# and then red the array in javascript. As solution I converted the the byte array into hex string with method:

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();
    }

Then this string i sent to javascript function and converted to array. The rezult was returned as string:

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



来源:https://stackoverflow.com/questions/65875699/convert-xlsx-byte-array-to-csvstring-with-javascript

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!