在 SAP S/4Hana 应用程序中使用节点 js 处理大 excel 文件
Procesing big excel file with nodejs in SAP S/4Hana Application
我想寻求一些帮助来解决我面临的问题(不是 javascript 开发人员,切记。)。任何帮助将不胜感激。
进程:用户从 UI 上传选定的 excel 文件。在后端,我们使用 xlsx/exceljs javascirpt 库处理文件(都尝试过 - 最终结果相同)以填充自定义数据结构供以后使用。
问题: 大 excel 文件(从 10k 行及更多行,有很多属性)我得到以下错误:
...错误:zip 损坏:找不到中央目录的末尾。
附加信息: 运行 普通 nodejs 服务器(本地)上的相同代码 - 它有效。在 SAP 服务器上 - 它没有。使用小文件 - 都很好。
技术: SAP S/4Hana,OData v4,xlsx v0.18.5,exceljs v4.3.0,节点 >= v12.
代码示例:
//with exceljs library
fromXlsx_1: async (buffer, cols) => {
const workbook = new ExcelJS.Workbook();
await workbook.xlsx.load(buffer);//<-- error
workbook.worksheets.forEach(function(sheet) {
//some code
});
},
//with xlsx library
fromXlsx_2: (buffer, cols) => {
var book = XLSX.read(buffer, { type: 'buffer', cellDates: true, cellText: false);//<-- error
var sheet = book.Sheets[book.SheetNames[0]];
const result = XLSX.utils.sheet_to_json(sheet, { header: Object.entries(cols).map(a => a[0]), raw: true });
//some code
}
如果需要更多信息- 问吧。
谢谢你的时间。
设法解决了。
根本原因是 - 缺乏知识和包“busboy”的实施(假设,将自定义包写入“处理”文件的同事没有犯错误)。
如果你像我一样偶然遇到类似的问题,请仔细检查“busboy”实现,如果它正确解析文件并且它等待文件被处理所有 - 使用 async/await 概念。
我想寻求一些帮助来解决我面临的问题(不是 javascript 开发人员,切记。)。任何帮助将不胜感激。
进程:用户从 UI 上传选定的 excel 文件。在后端,我们使用 xlsx/exceljs javascirpt 库处理文件(都尝试过 - 最终结果相同)以填充自定义数据结构供以后使用。
问题: 大 excel 文件(从 10k 行及更多行,有很多属性)我得到以下错误:
...错误:zip 损坏:找不到中央目录的末尾。
附加信息: 运行 普通 nodejs 服务器(本地)上的相同代码 - 它有效。在 SAP 服务器上 - 它没有。使用小文件 - 都很好。
技术: SAP S/4Hana,OData v4,xlsx v0.18.5,exceljs v4.3.0,节点 >= v12.
代码示例:
//with exceljs library fromXlsx_1: async (buffer, cols) => { const workbook = new ExcelJS.Workbook(); await workbook.xlsx.load(buffer);//<-- error workbook.worksheets.forEach(function(sheet) { //some code }); }, //with xlsx library fromXlsx_2: (buffer, cols) => { var book = XLSX.read(buffer, { type: 'buffer', cellDates: true, cellText: false);//<-- error var sheet = book.Sheets[book.SheetNames[0]]; const result = XLSX.utils.sheet_to_json(sheet, { header: Object.entries(cols).map(a => a[0]), raw: true }); //some code }
如果需要更多信息- 问吧。 谢谢你的时间。
设法解决了。 根本原因是 - 缺乏知识和包“busboy”的实施(假设,将自定义包写入“处理”文件的同事没有犯错误)。 如果你像我一样偶然遇到类似的问题,请仔细检查“busboy”实现,如果它正确解析文件并且它等待文件被处理所有 - 使用 async/await 概念。