使用NPM包XLSX读取表格时,如何保留空列A并截止到D列?
问题描述
我有一个XLS表格,需求如下:
- 读取无数据的A列并将其包含在结果中
- 不读取D列之后无数据的列
当前使用的代码片段如下:
import { read, utils, writeFileXLSX } from 'xlsx'; const f = await (await fetch("http://localhost:3001/experiment.csv")).arrayBuffer(); const type = "array"; const wb = read(f, { type }); const ws = wb.Sheets[wb.SheetNames[0]]; const rows = utils.sheet_to_json(ws, { header: "A" , defval }); /* create column array */ const range = utils.decode_range(ws["!ref"]||"A1"); const columns = Array.from({ length: range.e.c + 1 }, (_, i) => ({ key: i, name: utils.encode_col(i), // 列标签为A、B等 })); console.log('All Row rows=',rows,'columns2=',columns);
现在打印rows时未包含A列数据,请问需要在utils.sheet_to_json中设置哪些选项才能读取A列?
解决方案
要保留空的A列,你需要调整utils.sheet_to_json的两个核心参数:
给
defval赋值
你当前代码只写了defval但未指定值,这会导致空单元格被跳过。给它设置一个默认值(比如空字符串""或null),就能让空的A列被保留在结果里。添加
blankrows: true参数
这个参数会强制保留空行,确保即使A列所在行没有其他数据,整行也会被包含在结果数组中。
修改后的sheet_to_json调用代码:
const rows = utils.sheet_to_json(ws, { header: "A", defval: "", // 用空字符串填充空单元格,保留空列 blankrows: true // 保留空行 });
额外说明
header: "A"已经是正确设置,它会让结果以列字母(A、B、C...)作为对象的键,符合你要保留A列的需求。- 你现有的
range逻辑已经能自动识别表格的有效列范围(到D列为止),所以D列之后的空列不会被读取,无需额外调整。
内容的提问来源于stack exchange,提问作者Raj
相关产品推荐
相关产品推荐

