// 新建 @/utils/excel.ts import saveAs from 'file-saver'; // https://www.npmjs.com/package/file-saver import ExcelJS from 'exceljs'; // https://github.com/exceljs/exceljs/blob/master/README_zh.md import * as XLSX from 'xlsx'; // https://www.npmjs.com/package/xlsx import { Message } from '@arco-design/web-vue'; // https://arco.design/vue/component/message import { FileItem } from '@arco-design/web-vue/es/upload/interfaces'; // arco类型 export interface DownloadExcelPrams { columns: { title: string, key: string }[]; rows: object[]; name: string } // 导出下载文件 export function downloadExcel({ columns, rows, name = '未命名文件' }: DownloadExcelPrams) { const workbook = new ExcelJS.Workbook(); workbook.creator = 'Start-front'; workbook.lastModifiedBy = 'Start-front'; workbook.created = new Date(1985, 8, 30); workbook.modified = new Date(); workbook.lastPrinted = new Date(2016, 9, 27); // 将工作簿添加一个sheet页sheet1 const sheet1 = workbook.addWorksheet(name); // 表头数据添加 sheet1.columns = columns.map(item => ({ header: item.title, key: item.key, width: 20 })); // 表格内容添加 rows.map(item => sheet1.addRow(item)); workbook.xlsx.writeBuffer().then(buffer => { saveAs( new Blob([buffer], { type: 'application/octet-stream' }), `${name}.xlsx` ); }); }; // 读取文件为json格式 export function readExcle(fileItem:FileItem) { return new Promise((resove,reject)=>{ try { let workbook:XLSX.Sheet; const reader = new FileReader(); reader.readAsBinaryString(fileItem.file as File); // 发起异步请求 reader.onload = function(ev){ const data = ev.target?.result; workbook = XLSX.read(data, {type: 'binary'}); const sheetNames = workbook.SheetNames; // 工作表名称集合 sheetNames.forEach((name:string) => { const worksheet = workbook.Sheets[name]; // 只能通过工作表名称来获取指定工作表 const jsonres = XLSX.utils.sheet_to_json(worksheet); resove(jsonres) }); } // onload } catch (error) { Message.error('读取失败,请选择正确文件'); reject(error); } }) }