javascript - 使用没有 sheet.js 或 spread.js 的 Javascript 从 xlsx 读取大数据
问题描述
该问题的简短版本是我需要一种方法来读取包含 40k 行 36 列的 xlsx 文件。
Shee.js 内存不足,由于我们的开发环境,spread.js 不是一个选项,我尝试调用 Rest 来获取文档。任何超过 300 行的内容都会默默地失败,并且在循环中运行调用以重复提取 X 行并组合数据需要近 4 分钟,这对于基于 Web 的简单应用程序来说并不是一个真正的选择。
我们在 SharePoint 中。该页面的重点是提供一个简单的仪表板,其中包含 xlsx 中的数据,而无需将该数据导入列表。
解决方案
我现在找到的解决方案是使用 $.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 调用,以防止调用失败。
推荐阅读
- visual-studio - 提交更改从自动更改中显示。我怎样才能只看到我所做的更改?
- postgresql - Doobie 在通用上下文 F 的事务中运行多个效果 f1 和 f2?
- javascript - 传递 foreach 键时单击按钮时未捕获的引用错误
- python - 使用 django、celery 和 redis 的一项一项任务
- vue.js - 如何在服务文件 quasar vue 中调用路由器
- python - 'has_3([1, 3, 3])' 在 Python 中是什么意思?
- android - Amazon 简单通知服务 (SNS) - 如何发布消息以通过其 arn 或令牌指定端点
- jquery - CSS scroll-snap-type 与水平滚动
- api - 在发送之前使用 Adobe Sign API 在模板中填充表单字段
- c# - 有没有办法确保从 ac# 方法返回的值分配给变量?