xlsx.utils.sheet_to_json的{ header: 1 }中header属性的作用,以及解释

XLSX.utils.sheet_to_json 是为了把excel里面的数据解析出来,这是它的定义:

找源码里的sheet_to_json()方法,发现有三个同名的方法,有两个参数,第一个worksheet是要解析的excel文件的工作簿对象,第二参数opts?:
Sheet2JSONOpts, ?表示是这个参数可有可无,你不传就没有,Sheet2JSONOpts 我也不知道
,先不管了,咱们接着往下看源码有没有这个东西的定义。

在这里插入图片描述
其中,worksheet表示特定表名的工作表,opts属于可要可不要的参数。

opts也有几种类型:

export interface Sheet2JSONOpts extends DateNFOption {
    /** Output format */
    header?: "A"|number|string[];

    /** Override worksheet range */
    range?: any;

    /** Include or omit blank lines in the output */
    blankrows?: boolean;

    /** Default value for null/undefined values */
    defval?: any;

    /** if true, return raw data; if false, return formatted text */
    raw?: boolean;

    /** if true, skip hidden rows and columns */
    skipHidden?: boolean;

    /** if true, return raw numbers; if false, return formatted numbers */
    rawNumbers?: boolean;
}

其中,header表示控制输出的类型,range表示跳过的行,defavl表示默认值,为null和undefine时,会默认跳过。

对于header,也有几种类型:

在这里插入图片描述

🙋‍🌰(举个栗子)
下面是Excel表格的数据:
在这里插入图片描述

这是代码1const outdata = XLSX.utils.sheet_to_json(workbook.Sheets[sheetName],{ header: 1 })
console.log(outdata)

这是输出的结果1[
  [ 'q', 'w', 'e', 'r' ],
  [1, empty, 3, 4],
  [ '数据1', '数据2', '数据3' ]
]
这是代码2const outdata = XLSX.utils.sheet_to_json(workbook.Sheets[sheetName],{ header: 2 })
console.log(outdata)

这是输出的结果2[
{q: 1, e: 3, r: 4}
{q: '数据1', w: '数据2', e: '数据3'}
]
这是代码3const outdata = XLSX.utils.sheet_to_json(workbook.Sheets[sheetName],{ header: 8 })
console.log(outdata)

这是输出的结果3[ { q: 1, e: 3, r: 4 }, { q: '测试1', w: '测试2', e: '测试3' } ]

观察发现

1.当header 为1时,输出为一个二维数组,输出了所有数据,包含了空值项,但每行末尾空值不显示。
2.当header不为1时,输出一个包含字符串的数组,不包含空值项,直接跳过空值。同时是一个以第一行为Key值的键值对。

这是代码4const outdata = XLSX.utils.sheet_to_json(workbook.Sheets[sheetName],{ header: 'A' })
console.log(outdata)

这是输出的结果4[
  { A: 'q', B: 'w', C: 'e', D: 'r' },
  { A: 1, C: 3, D: 4 },
  { A: '数据1', B: '数据2', C: '数据3' }

观察发现

当参数为“A”时,是一个以excel的ABCDE等为key值的键值对,默认也不显示空值。

这是代码5const outdata=XLSX.utils.sheet_to_json(workbook.Sheets[sheetName],{ header:  ["A","C",1,4] })
console.log(outdata)

这是输出的结果5[
{1: 'e', 4: 'r', A: 'q', C: 'w'},
{1: 3, 4: 4, A: 1}
{1: '数据3', A: '数据1', C: '数据2'}
]
这是代码6const outdata=XLSX.utils.sheet_to_json(workbook.Sheets[sheetName],{ header:["A","C",1,3,6,"N"] })
console.log(outdata)

这是输出的结果6[
 {1: 'e', 3: 'r', A: 'q', C: 'w'}
 {1: 3, 3: 4, A: 1}
 {1: '数据3', A: '数据1', C: '数据2'}
]

观察看出,当参数是字符数组时,输出是以字符数组的字符为key值得键值对。同时有这些特性:

1.每个字符的序号与excel原始数据对应,我的excel只有四列数据,这里无论你的字符数组有多长,也只会取前四个。
2.不同字符,以阿拉伯数字从小到大优先排列,后面字母从A到Z排列。

一般情况我们都使用,{ header: 1 },只有这个会生成二维数组,输出每一行数据,并且不是键值对!
我个人人物 直接删掉 header 这个属性 更为便捷 好用
写法如下:

  let oldsheetData = XLSX.utils.sheet_to_json(sheet);

具体详情可见我参考的文档

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值