import * as XLSX from 'xlsx'; export function getXlsxData(file: any) { return new Promise((resolve, reject) => { const fileReader = new FileReader(); fileReader.onload = event => { try { let data:any = []; // 存儲獲取到的數據 const result = event.target?.result; // 以二進制流方式讀取得到整份excel表格對象 const workbook = XLSX.read(result, { type: 'binary' }); // 遍歷每張工作表進行讀取(這里默認只讀取第一張表) for (const sheet in workbook.Sheets) { if (workbook.Sheets.hasOwnProperty(sheet)) { // 利用 sheet_to_json 方法將 excel 轉成 json 數據 let sheetJson = XLSX.utils.sheet_to_json(workbook.Sheets[sheet], { defval: '' }) // console.log("sheetJson>>", sheetJson) data = data.concat(sheetJson); // break; // 如果只取第一張表,就取消注釋這行 } } resolve(data); } catch (e) { // 這里可以拋出文件類型錯誤不正確的相關提示 console.log('文件類型不正確'); reject(e); } }; // 以二進制方式打開文件 fileReader.readAsBinaryString(file); }) } export function downloadXlsx(columns: Array<string>, data: Array<any>, fileName: string) { //columns 表頭 data文件數據列表 fileName文件名稱 let table = []; let obj = {}; columns.forEach((el, index) => { let str = String.fromCharCode(index + 65); obj[str] = el }) table.push(obj) data.forEach((arr) => { let row = {} arr.forEach((el: any, index: number) => { let str = String.fromCharCode(index + 65); row[str] = el }) table.push(row); }); //創建book let wb = XLSX.utils.book_new(); //json轉sheet let ws = XLSX.utils.json_to_sheet(table, { header: Object.keys(obj), skipHeader: true }); //設置列寬 ws['!cols'] = (new Array(Object.keys(obj).length)).fill({ width: 15 }); //sheet寫入book XLSX.utils.book_append_sheet(wb, ws, "file"); //輸出 let name = fileName || "文件下載" XLSX.writeFile(wb, name + ".xlsx"); } export function formatJson(filterVal: Array<string>, jsonData: Array<any>,) { return jsonData.map((v) => v && Object.keys(v).length ? filterVal.map((j) => v[j] || '') : [] ); }