通過SheetJS(XLSX)前端解析、生成Excel檔案
阿新 • • 發佈:2021-01-16
npm install xlsx -S
import XLSX from 'xlsx';
// 解析Excel
// 此處省略獲取檔案方式,假設file為獲取到的檔案
const parseExcel = file => {
var reader = new FileReader();
reader.onload = function (e) {
var data = e.target.result;
var workbook = XLSX.read(data, {
type: 'binary'
});
var first_worksheet = workbook.Sheets[ workbook.SheetNames[0]];
// XLSX自帶了一個工具把匯入的資料轉成json
var jsonArr = XLSX.utils.sheet_to_json(first_worksheet, {header: 1});
return jsonArr;
};
reader.readAsBinaryString(file);
}
// 根據json生成下載
let mockData = [
{
name: '張三',
age: 18,
sex: '男'
},
{
name: '李四',
age: 15,
sex: '女'
}
];
// 設定表頭
mockData.unshift({
name: '姓名',
age: '年齡',
sex: '性別'
});
var worksheet = XLSX.utils.json_to_sheet(mockData, {
header: ['name', 'sex', 'age'], // 自定義表頭順序
skipHeader: true, // 隱藏鍵值,可自行改成false下載後對比差異
});
// begin,把每個單元格格式都設定為文字,如果不需要修改單元格格式可省略此處程式碼
var range = XLSX.utils.decode_range(worksheet['!ref' ]);
for (var row = range.s.r; row <= range.e.r; row++) {
for (var columns = range.s.c; columns <= range.e.c; columns++) {
var cellName = XLSX.utils.encode_cell({c: columns, r: row});
worksheet[cellName].z = '@';
}
}
// end
var new_workbook = XLSX.utils.book_new();
XLSX.utils.book_append_sheet(new_workbook, worksheet, 'Sheet1');
// 設定檔名,自動執行下載
XLSX.writeFile(new_workbook, '人員資訊.xlsx');