使用 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;
},
我来自 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;
},