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

使用ExcelJS合并单元格时出现数据重复问题求助

使用ExcelJS合并单元格异常问题

我在使用ExcelJS合并单元格时遇到问题:想要合并B1到C1单元格,但实际效果不是合并单元格,而是把B1的值复制到C1中——错误表现为B1和C1两个独立单元格都显示“Project Name”,并未合并成一个单元格。

我的代码如下:

async getProjectReport(data) {
  try {
    // 创建工作簿并添加工作表
    const workbook = new ExcelJS.Workbook();
    const worksheet = workbook.addWorksheet('Project Report');

    // 添加表头行
    worksheet.addRow(['Project No.', 'Project Name']).font = {
      bold: true,
    };

    // 尝试合并单元格
    worksheet.mergeCells('B1:C1');

    // 设置列宽
    worksheet.columns = [{ width: 12 }, { width: 30 }, { width: 15 }];

    // 添加数据行
    const projectDetailsRow = worksheet.addRow(['1', 'Project Abc']);

    // 将工作簿写入缓冲区并返回
    const buffer = await workbook.xlsx.writeBuffer();
    return buffer;
  } catch (error) {
    throw new Error(error);
  }
}

我期望的效果是B1到C1单元格合并为一个,内容“Project Name”显示在合并后的单元格中。

我还尝试了通过行列索引的方式合并,结果完全相同:

// 按起始行、起始列、结束行、结束列合并(对应B1:C1)
worksheet.mergeCells(1, 2, 1, 3);

解决方法

问题出在代码执行顺序上:worksheet.columns的设置会重置单元格结构,破坏之前的合并设置。调整操作顺序,先设置列宽,再添加行和执行合并操作即可解决:

修改后的代码:

async getProjectReport(data) {
  try {
    const workbook = new ExcelJS.Workbook();
    const worksheet = workbook.addWorksheet('Project Report');

    // 先设置列宽
    worksheet.columns = [{ width: 12 }, { width: 30 }, { width: 15 }];

    // 添加表头行
    const headerRow = worksheet.addRow(['Project No.', 'Project Name']);
    headerRow.font = { bold: true };

    // 合并B1:C1单元格
    worksheet.mergeCells('B1:C1');

    // 可选:设置合并后内容居中,更贴合预期效果
    headerRow.getCell(2).alignment = { horizontal: 'center' };

    // 添加数据行
    worksheet.addRow(['1', 'Project Abc']);

    const buffer = await workbook.xlsx.writeBuffer();
    return buffer;
  } catch (error) {
    throw new Error(error);
  }
}

原因说明

当调用worksheet.columns时,ExcelJS会为每一列初始化单元格对象,这会覆盖之前对单元格(包括合并状态)的所有修改。因此必须先完成列宽设置,再进行行添加和单元格合并操作。

内容的提问来源于stack exchange,提问作者Bharat Kumar Rajor

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 06:55:00