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表格的数据:
这是代码1:
const 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' ]
]
这是代码2:
const 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'}
]
这是代码3:
const 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值的键值对。
这是代码4:
const 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值的键值对,默认也不显示空值。
这是代码5:
const 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'}
]
这是代码6:
const 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);