You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用ExcelJS在JS中从含空单元格的Excel生成对象数组

解决ExcelJS读取Excel时空单元格丢失、属性不完整的问题

问题根源在于ExcelJS的row.eachCell()方法默认只会遍历有值或有样式的单元格,空单元格会被跳过,导致对应表头的属性根本不会被添加到rowData中,自然无法设置为空字符串。另外原代码判断第一列是否有值的逻辑也不够严谨,需要覆盖空字符串、null、undefined的情况。

修改后的完整代码

function handleSaveCSV() {
    if (files.accepted.length === 0) {
        console.log('No file selected.');
        return;
    }
    const file = files.accepted[0]; 
    const reader = new FileReader();

    reader.onload = async (event) => {
        const data = new Uint8Array(event.target.result);
        const workbook = new ExcelJS.Workbook();
        await workbook.xlsx.load(data);

        const worksheet = workbook.getWorksheet(1);
        const headerRow = worksheet.getRow(1);
        const headers = headerRow.values;
        // 获取表头总列数(ExcelJS列从1开始计数)
        const totalColumns = headerRow.cellCount;

        const dataArray = [];

        for (let i = 2; i <= worksheet.rowCount; i++) {
            const row = worksheet.getRow(i);
            const rowData = {};

            // 遍历所有表头列,而非仅存在值的单元格
            for (let colNumber = 1; colNumber <= totalColumns; colNumber++) {
                const header = headers[colNumber];
                if (header) {
                    const cell = row.getCell(colNumber);
                    // 单元格无值时统一设为空字符串
                    rowData[header] = cell.value !== null && cell.value !== undefined ? cell.value : '';
                }
            }

            // 严格判断第一列是否有有效内容(排除空、空白字符串)
            const firstColumnValue = rowData[headers[1]];
            if (firstColumnValue !== null && firstColumnValue !== undefined && firstColumnValue.trim() !== '') {
                dataArray.push(rowData);
            }
        }

        console.log(dataArray);
    };

    reader.readAsArrayBuffer(file);
}

关键修改说明

  • 用headerRow.cellCount获取表头总列数,确保所有表头对应的列都被遍历
  • 主动调用row.getCell(colNumber)获取每一列的单元格,无论是否为空
  • 初始化所有表头属性,空单元格对应值强制设为空字符串
  • 优化第一列的筛选逻辑,仅保留有非空、非空白有效值的行

内容的提问来源于stack exchange,提问作者Avi4nFLu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 04:35:10