使用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
相关产品推荐
相关产品推荐

