安装或引入
/** * 在浏览器中,只需添加脚本标记: * cdn 资源包网址: https://cdnjs.com/libraries/xlsx */<script src="https://oss.sheetjs.com/sheetjs/tests/xlsx.full.min.js"></script>使用 npm:$ npm install xlsx
import * as XLSX from 'xlsx';
导出excel
Json/二维数组导出excel
function exportExcel() { /* 创建一个工作薄 */ let workbook = XLSX.utils.book_new(); /* 使用 XLSX.utils.aoa_to_sheet(data) 创建sheet对象, data 为二位数组 */ const aoaSheet = XLSX.utils.aoa_to_sheet([ ['周一', '周二', '周三', '周四', '周五'], ['语文', '数学', '历史', '政治', '英语'], ['数学', '数学', '政治', '英语', '英语'], ['政治', '英语', '历史', '政治', '数学'], ]); /* 使用 XLSX.utils.json_to_sheet(data) 创建sheet对象, data 为json对象 */ const jsonSheet = XLSX.utils.json_to_sheet( [ { 周一: '语文', 周二: '数学', 周三: '历史', 周四: '政治', 周五: '英语' }, { 周一: '数学', 周二: '数学', 周三: '政治', 周四: '英语', 周五: '英语' }, { 周一: '政治', 周二: '英语', 周三: '历史', 周四: '政治', 周五: '数学' }, ], { // 序列化表头 header: ['周五', '周四', '周三', '周二', '周一'], // 忽略原来的表头 // skipHeader: true, }, ); /* 使用指定的单元格作为起点插入数据,r:行, c:列,详情看官网文档 */ // XLSX.utils.sheet_add_aoa( // aoaSheet, // [ // ['数学', '语文'], // ['政治', '语文'], // ['历史', '政治'], // ], // { origin: { r: 2, c: 4 } }, // ); /* 设置表格样式,!cols为列宽 */ aoaSheet['!cols'] = [{ wpx: 100 }, { wpx: 100 }, { wpx: 100 }, { wpx: 100 }, { wpx: 100 }]; /* 将sheet 对象添加到工作薄中,支持多个sheetData */ XLSX.utils.book_append_sheet(workbook, aoaSheet, 'aoaSheet'); XLSX.utils.book_append_sheet(workbook, jsonSheet, 'jsonSheet'); /* 生成excel的配置项 */ var options = { // 要生成的文件类型 bookType: 'xlsx', // 是否生成Shared String Table,官方解释是,如果开启生成速度会下降,但在低版本IOS设备上有更好的兼容性 bookSST: false, // 二进制类型 type: 'binary', }; /* 尝试编写工作簿 wb,在基于浏览器的环境中,它将尝试强制客户端下载*/ XLSX.writeFile(workbook, '课程表.xlsx', options);}
另一种写法
/* 创建一个工作薄 */let workbook = { SheetNames: ['Sheet1'], Sheets: {}, Props: {} };/* 使用 XLSX.utils.aoa_to_sheet(data) 创建sheet对象, data 为二位数组 */const sheet = XLSX.utils.json_to_sheet([['数学', '语文']]);/* 合并单元格 */// data['!merges'] = [// {// //合并第一行数据[B1,C1,D1,E1]// s: {// //s为开始// c: 1, //开始列// r: 0, //开始取值范围// },// e: {// //e结束// c: 4, //结束列// r: 0, //结束范围// },// },// ];/* 将sheet 对象添加到工作薄中,支持多个sheetData */wb.Sheets['Sheet1'] = sheet;
参考标题连接
使用 xlsx 修改样式(文字大小颜色)
excel导入解析
excel解析json
<!DOCTYPE html><html> <head> <meta charset="UTF-8" /> <title>示例</title> </head> <body> <input id="input" type="file" accept=".xls,.xlsx,.csv" /> <!-- <div id="myBtn">88</div> --> <script src="https://oss.sheetjs.com/sheetjs/tests/xlsx.full.min.js"></script> <script> let inputDom = document.getElementById('input'); inputDom.addEventListener('change', (evt) => { // 获取 file 文件 var selectedFile = evt.target.files[0]; var reader = new FileReader(); reader.onload = function (event) { // 数据读取存放 const dataArr = []; var data = event?.target?.result; // 将文件转为二进制 var workbook = XLSX.read(data, { type: 'binary', }); // 获取工作蒲的工作表名称 workbook.SheetNames.forEach(function (sheetName, index) { let XL_row_object = XLSX.utils.sheet_to_json(workbook.Sheets[sheetName], { // 可以指定对象属性值 // header: [ // 'userId', // 'empId', // 'userName', // 'indexCode', // 'weight', // 'indexValue', // 'rowNum', // ], }); if (XL_row_object.length > 0) { console.log(XL_row_object, '有数据啦...'); } }); inputDom.value = ''; }; reader.onerror = function (event) { console.error('File could not be read! Code ' + event?.target?.error?.code); }; // 读取上传文件为二进制 reader.readAsBinaryString(selectedFile); }); </script> </body></html>
参考文档