首页 > 解决方案 > 使用没有 sheet.js 或 spread.js 的 Javascript 从 xlsx 读取大数据

问题描述

该问题的简短版本是我需要一种方法来读取包含 40k 行 36 列的 xlsx 文件。

Shee.js 内存不足,由于我们的开发环境,spread.js 不是一个选项,我尝试调用 Rest 来获取文档。任何超过 300 行的内容都会默默地失败,并且在循环中运行调用以重复提取 X 行并组合数据需要近 4 分钟,这对于基于 Web 的简单应用程序来说并不是一个真正的选择。

我们在 SharePoint 中。该页面的重点是提供一个简单的仪表板,其中包含 xlsx 中的数据,而无需将该数据导入列表。

标签: javascriptexcelsharepointxlsxdata-processing

解决方案


我现在找到的解决方案是使用 $.ajax 异步工作来拉取各个列。

每个 ajax 调用我可以撤回 10,000 个项目,因此我创建了一个包含列名的字符串数组,执行了一个 forEach 循环,该循环运行一个 rest 调用以获取该列中的所有数据(每列 4 个调用),然后在每个循环的结尾我都在增加一个数字。

一旦数字等于列数组 -1,我将列拼接成一个 2D 数组。

它比我想要的要慢,但它将时间从 4-9 分钟缩短到大约 30 秒。这是因为它不是在一个链中进行数百个调用,而是同时进行数百个调用。

编辑:为将来想要使用它的任何人扩展此答案。

var cols = ['a', 'b', 'c', 'd', 'e', 'f'];
var data = {};
cols.forEach(function(item, I){
    data[item] = getData(item, 1, 100000);
});

显然代码不完整,只是一个示例(我正在使用我开发的库来获取和格式化数据),但这是基本思想。它将在每一列而不是整个文档上运行 AJAX 调用,以防止调用失败。


推荐阅读