简体   繁体   中英

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

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.

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM