// 上传文件
const handleUpload = async (e) => {
const file = e.target.files[0]
if(!file) return
const data = await getJson(file)
jsonData = data
}
// 处理文件获得数据
const getJson = (file) => {
return new Promise((resolve, )=>{
// 创建一个文件解析器
const reader = new FileReader()
// 传入file
reader.readAsArrayBuffer(file)
reader.onload = e => {
const data = e.target.result
// 解析成数组格式
const workbook = XLSX.read(data, {type : 'array'})
const sheet1 = workbook.Sheets['Sheet1']
const json1 = XLSX.utils.sheet_to_json(sheet1)
resolve(json1)
}
})
}
// 导出数组数据
const exportExcel = (arr,sheetName,fileName) => {
// 创建json
const jsonWorkSheet = XLSX.utils.json_to_sheet(arr)
// 创建sheet
const workbook = {
SheetNames : [sheetName],
Sheets : {
[sheetName] : jsonWorkSheet
}
}
return XLSX.writeFile(workbook,fileName+'.xlsx')
}
// 导出sheets对象
const exportExcelBySheets = (sheets, fileName = 'example.xlsx') => {
// sheetName数组
const SheetNames = [];
// 对象数据 : sheetName : array
const Sheets = {};
const workbook = { SheetNames, Sheets };
// 赋值
sheets.forEach((sheet, i) => {
const name = `sheet${i + 1}`;
SheetNames.push(name);
Sheets[name] = sheet;
});
return XLSX.writeFile(workbook, fileName, { type: 'binary' });
};
修改表头
// 传入的分别是数据,顺序,已经表头映射对象
// ws == jsonWorkSheet
const changeTabelHeader = (data,fields,titles) => {
const ws = XLSX.utils.json_to_sheet(
data,
{
header : fields
}
)
const range = XLSX.utils.decode_range(ws['!ref'])
for(let c = range.s.c;c <= range.e.c;c++){
const header = XLSX.utils.encode_col(c) + '1'
ws[header].v = titles[ws[header].v]
}
return ws
}