请选择 进入手机版 | 继续访问电脑版
Richard.Ma 讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2025-6-4 12:13  /   查看:512  /  回复:0
本帖最后由 Richard.Ma 于 2025-6-30 15:05 编辑

背景:Excel对表格中合并单元格的限制
SpreadJS作为一款强大的前端电子表格控件,提供了丰富的表格(Table)功能,包括在表格内部创建合并单元格。然而,这一特性与Microsoft Excel存在兼容性问题:
  • Excel的限制:Excel原生不支持表格(Table)内部的合并单元格操作。当用户尝试在Excel表格中合并单元格时,会收到错误提示"此操作与表格不兼容"。
  • 用户需求:许多用户在使用SpreadJS设计复杂报表时,习惯在表格中使用合并单元格来实现更好的视觉效果。配合给表格中设置数据绑定关系。绑定数据后能实现按数据扩展表格,生成所需的报表。但是
    直接导出会导致Excel后,这些合并单元格就会丢失,被合并的单元格以及边框重新被显示了出来,不符合用户预期。他们期望这些合并效果在导出为Excel文件后仍然保留。


解决方案:表格转换为普通区域
在导出为XLSX文件前,将工作簿中的所有表格(Table)转换为普通单元格区域,同时保留合并单元格的结构和样式。
实现步骤

使用SpreadJS处理并导出
  1. sheet.tables.all().forEach((table)=>{
  2.     sheet.tables.remove(table, GC.Spread.Sheets.Tables.TableRemoveOptions.keepData|GC.Spread.Sheets.Tables.TableRemoveOptions.keepStyle);
  3. })
复制代码

然后再继续通过spread.export方法进行导出即可


使用GCExcel处理并导出
  1.           for (int r = sheet.getTables().getCount()-1; r >= 0; r--) {
  2.                sheet.getTables().get(r).convertToRange();
  3.           }
  4.           workbook.save("output.xlsx");
复制代码


经过上述代码处理后,表格会被删除,但是所在区域的样式和内容,以及合并单元格都会保留下来






0 个回复

您需要登录后才可以回帖 登录 | 立即注册
返回顶部