目的:前端导入表格
使用xlsx的包 版本是 0.16.8 最新的目前是18 不兼容 有问题
import * as XLSX from 'xlsx';
// import XLSX from 'xlsx' 没有这样写 是因为报错了 有知道为什么的可以评论一下 共享
function getHeaderRow(sheet) {
const headers = []
const range = XLSX.utils.decode_range(sheet['!ref'])
let C
const R = range.s.r
/* start in the first row */
for (C = range.s.c; C <= range.e.c; ++C) { /* walk every column in the range */
const cell = sheet[XLSX.utils.encode_cell({ c: C, r: R })]
/* find the cell in the first row */
let hdr = 'UNKNOWN ' + C // <-- replace with your desired default
if (cell && cell.t) hdr = XLSX.utils.format_cell(cell)
headers.push(hdr)
}
return headers
}
// 读取Excel文件数据
export function readExcelFile(file) {
return new Promise((resolve, reject) => {
const reader = new FileReader();
reader.onload = (e) => {
const data = e.target.result
const workbook = XLSX.read(data, { type: 'array' })
const firstSheetName = workbook.SheetNames[0]
const worksheet = workbook.Sheets[firstSheetName]
const header = getHeaderRow(worksheet)
const results = XLSX.utils.sheet_to_json(worksheet)
resolve({ header, results })
};
reader.onerror = (e) => {
reject(e);
};
reader.readAsArrayBuffer(file);
});
}
// 会返回表头数组 和 结果数组 fileValue = e.target.files[0] 我用的<input type="file" 原生
const { header = [], results = [] } = await readExcelFile(fileValue)
// results返回的键是中文的 需要转成英文 变成表格需要的数据
const chineseMap = {
'入职日期': 'timeOfEntry',
'手机号': 'mobile',
'姓名': 'username',
'转正日期': 'correctionTime',
'工号': 'workNumber'
}
const importData = results.map(item => {
const itemObj = {}
Object.keys(item).forEach(key => {
itemObj[chineseMap[key]] = String(item[key]).trim()
})
return itemObj
})