我正在尝试将 Excel 电子表格 (.xlsx) 解析为 JSON。
我正在为此使用 SheetJS 节点包。
但是我无法实现这么简单的事情 - 如何获得与内部存储格式相同的列名?
下面是我的代码:
function _buildColumnsArray(range) {
// range = "A1:CA38"
// ...
// should return ['A', ..., 'Z', 'AA', ..., 'AZ', 'BA', ..., 'BZ', 'CA'...]
}
// --------
var workbook = XLSX.readFile(fileUrl),
sheets = workbook.Sheets,
result = {};
result.sheetNames = [];
for (var i = 0; i < workbook.SheetNames.length; i++) {
var sheet = workbook.Sheets[workbook.SheetNames[i]],
csvSheet = XLSX.utils.sheet_to_csv(sheet);
// '!ref' referring to a specific range by docs
if (sheet["!ref"]) {
var columns = _buildColumnsArray(sheet["!ref"]),
rows = _buildRowsArray(columns, csvSheet);
// build final result
result[workbook.SheetNames[i]] = {
columns: columns,
rows: rows
};
result.sheetNames.push(workbook.SheetNames[i]);
}
}
这是我目前正在尝试但效果不佳的方法: https ://jsfiddle.net/t8hej9hu/
原文由 Vytalyi 发布,翻译遵循 CC BY-SA 4.0 许可协议
JavaScript 中的字母数字转换
受 PHP 解决方案的启发,这里有一些不同的字母数字转换。这是一个简单的最小示例,零错误检查只是为了完成这项工作。
我们需要两个辅助函数来进行转换。字母表字母的字符代码在Unicode表中已经按字母顺序排列,所以我们只需要在转换时添加或删除偏移量即可。
另一个用于将数字转换为字母数字。
_buildColumnsArray
功能的最终版本:返回的数组必须与 MS Excel 中的列名完全相同:
这是一个工作示例,我一直在使用 Mocha 和 Chai 来测试(“重播”按钮在这里的行为与预期不符)结果,因此代码量有点大。