我试图从 xlsx 文件中获取 json 数据,但偶然发现了奇怪的“js-xlsx”行为。如果我有一个标题中包含合并单元格的表格,那么我只会从表格的输出中获得第一行数据。如果我手动删除这一行(在 EXCEL 中) - 那么我会得到所有数据。如果我手动取消合并此单元格 - 再次:json 中的所有数据。
所以问题出在合并的单元格上,任务是跳过它\避免在导出\删除它\做其他任何事情......
我试图通过“js-xlsx”删除这一行,从 SO 接受的答案中得到了一些代码,但它没有帮助,而且处理合并的单元格似乎有点奇怪:
const XLSX = require('xlsx');
let workbook = XLSX.readFile('./downloads/wb_sales.xlsx');
var worksheet = workbook.Sheets[workbook.SheetNames[0]];
function ec(r, c){
return XLSX.utils.encode_cell({r:r,c:c});
}
function delete_row(ws, row_index){
var variable = XLSX.utils.decode_range(ws["!ref"])
for(var R = row_index; R < variable.e.r; ++R){
for(var C = variable.s.c; C <= variable.e.c; ++C){
ws[ec(R,C)] = ws[ec(R+1,C)];
}
}
variable.e.r--
ws['!ref'] = XLSX.utils.encode_range(variable.s, variable.e);
}
// trying to delete first row
delete_row(worksheet,0)
// here I get just the first row of data
console.log(XLSX.utils.sheet_to_json(worksheet));
尝试过worksheet[!'merged']=''
- 它清除了单元格,但合并状态仍然存在。
试过了
var range = XLSX.utils.decode_range(worksheet['!ref']);
range.s.r = 1; // <-- skipping first row with merged cell, but not working either.
worksheet['!ref'] = XLSX.utils.encode_range(range);
不好。相同的输出。
尝试过worksheet['A1']=worksheet['A2']
复制内容,但合并仍然存在。
关于上面说的:
- 如何删除此任务中的第一行(不清除单元格内容但删除)?
- 如何取消合并合并的单元格?
- 如何删除合并的单元格(不是清除单元格,而是删除它)。
对所有人表示感谢:)