excel 文件地址:https://demo.runoops.com/file/test-product.xlsx
excel 文件内容:
目录结构:
安装exceljs
npm install exceljs --save
//或者 cnpm install exceljs
excel转json
test.js 文件:
实例
const ExcelJS = require('exceljs');
(async () => {
const workbooks = new ExcelJS.Workbook();
// 本地excel文件读取
// let book = await workbooks.xlsx.readFile(filename);
// await workbooks.xlsx.readFile(filename);
// 远程读取
let excelUrl = 'https://demo.runoops.com/file/test-product.xlsx';
const excelBody = await fetch(excelUrl);
// 按buffer读取
await workbooks.xlsx.load(await excelBody.arrayBuffer());
// 从流读取
// await workbooks.xlsx.read(excelBody.body);
//获取第一个worksheet
const worksheet = workbooks.getWorksheet(1);
//指定的列
let mappingKeys = ['sku','title','description'];
let result = [];
let keys = [];
// 按行读取
worksheet.eachRow((row, rowNumber) => {
let obj = {};
// cell.type单元格类型:6-公式 ;2-数值;3-字符串
row.eachCell((cell, colNumber) => {
const value = cell.value;
if (rowNumber === 1) {
keys.push(value);
} else {
const key = keys[colNumber - 1];
if (mappingKeys.includes(key)) {
obj[key] = value;
obj[keys[colNumber - 1]] = value;
}
}
});
if (rowNumber > 1) {
result.push(obj)
}
});
console.log(result);
})();
使用 cell.type 获取单元格类型:6-公式 ;2-数值;3-字符串。
如果是数值,文本,读取值可以用 cell.value;
如果为公式,读取值可以用cell.result;
如果不管类型,读取内容可以直接用cell.text。
运行查看效果:
$ node test.js
[
{
sku: 'testabc1',
title: 'testa',
description: 'this is a test product a'
},
{
sku: 'testabcb',
title: 'testb',
description: 'this is a test product b'
}
]
分享笔记