4

我正在开发 Meteor 应用程序,使用“SheetJS”中名为“js_xlsx”的 Node.js 包,由“SheetJSDev”制作。我正在使用这个包在后端将上传的 Excel 表格转换为 JSON,所以我可以将它存储在我的 MongoDB 中,并用它在前端做一些花哨的分类工作。只有一个问题。包会跳过具有空标题的列,但最右边的具有空标题的列除外。我已经发现该包可以很好地处理带有空标题的列,但是因为 JSON 键需要是唯一的,所以它只保存 JSON 对象中带有空标题的最后一列。

例子:

填充所有标题:

在此处输入图像描述

在此处输入图像描述

如您所见,当所有标题都已填满时,一切正常。

第一个和倒数第二个标题为空:

在此处输入图像描述

在此处输入图像描述

在这里,您看到倒数第二列放在前面,带有“未定义”标题,第一列甚至不在其中(因为它被倒数第二列覆盖,因为它们都有“未定义”作为键)。

前 3 列和倒数第二个标题为空:

在此处输入图像描述

在此处输入图像描述

与第三张和第四张图片相同的东西。只有带有空标题的最后一列才会进入 JSON 对象。

现在,我翻阅了源代码并搜索了 GitHub 页面,甚至请求谷歌帮助我,但无济于事。

我想知道的是:

你如何让 js_xlsx 处理所有带有空标题的列?

包的 GitHub 页面的链接是:

https://github.com/SheetJS/js-xlsx

任何帮助深表感谢!

4

1 回答 1

5

怀疑您的问题是,默认情况下, SheetJS (xlsx.js) sheet_to_json 函数完全跳过空单元格。(没有通用的“如何处理空单元格”......不幸的是(恕我直言),他们默认为简单地跳过整个单元格......让你的 JSON 陷入混乱。)鉴于他们使用标题作为键,如你说,这可能会阻止整个列生成。

您可以通过在选项对象中指定一个 defval 值来更改此行为,该选项可以选择性地传递给该函数。

例如:

filledOutJSON = XLSX.utils.sheet_to_json(worksheet,{"defval":"whatever_you_want"});

请注意,如果需要,您可以指定空字符串""

您可以指定其他选项,如此处指定:https ://github.com/SheetJS/js-xlsx#json

于 2017-04-05T15:10:15.767 回答