js读取excel文件内容注意事项
npm install xlsx
import * as XLSX from 'xlsx';function readExcelFile(file) {const reader = new FileReader();reader.onload = (e) => {const data = e.target.result;const workbook = XLSX.read(data, { type: 'binary' });// 获取第一个工作表的数据const firstSheetName = workbook.SheetNames[0];const worksheet = workbook.Sheets[firstSheetName];const jsonData = XLSX.utils.sheet_to_json(worksheet, { header: 1 }); // header: 1 表示第一行作为列名console.log(jsonData); // 打印数据为JSON格式};reader.readAsBinaryString(file);}// 示例:从文件输入中读取Excel文件document.getElementById('file-input').addEventListener('change', (event) => {const file = event.target.files[0];readExcelFile(file);});
<input type="file" id="file-input" />
// 假设你已经通过 XLSX.read 或 XLSX.readFile 获取了 workbookconst worksheet = workbook.Sheets[workbook.SheetNames[0]];// 自定义函数:根据实际有值的单元格计算工作表真实范围function getActualDataRange(worksheet) {// 获取所有单元格的地址(键名)const keys = Object.keys(worksheet).filter(k => k[0] !== '!'); // 过滤掉以 '!' 开头的特殊属性if (keys.length === 0) {return null; // 空表}// 解码所有单元格地址,获取行列索引const cells = keys.map(k => XLSX.utils.decode_cell(k));const rows = cells.map(c => c.r);const cols = cells.map(c => c.c);// 找到最大行和最大列const maxRow = Math.max(...rows);const maxCol = Math.max(...cols);// 编码最后一个单元格的地址const lastCell = XLSX.utils.encode_cell({ r: maxRow, c: maxCol });// 返回标准范围字符串,例如 "A1:Z100"return `A1:${lastCell}`;}// 修正工作表的范围worksheet['!ref'] = getActualDataRange(worksheet);// 现在再调用 sheet_to_json 就只会处理真实有数据的范围了const jsonData = XLSX.utils.sheet_to_json(worksheet);
夜雨聆风
