请选择 进入手机版 | 继续访问电脑版
清风沐阳
金牌服务用户   /  发表于:2026-1-9 13:43  /   查看:27  /  回复:4
1金币
本帖最后由 清风沐阳 于 2026-1-9 13:50 编辑

需求:
一、新建表格中设置表格列单元格类型

1、自定义单元格类型,见附件;
2、在sheet设计器中创建一个表格,如图:

3、使用以下代码设置表格第一列的单元格类型,
  1. const workbook = designer?.getWorkbook() as any;
  2.       const sheet = workbook.getActiveSheet();
  3.       sheet?.setValue(3, 2, false);
  4.       const table = sheet.tables.find(3, 2);
  5.       const columnLayoutStyle = table.columnLayoutStyle(0) as GC.Spread.Sheets.Tables.ITableLayoutStyle;
  6.       columnLayoutStyle.data = new GC.Spread.Sheets.Style();
  7.       // @ts-ignore
  8.       columnLayoutStyle.data.cellType = new BoolCellType();
  9.       table.columnLayoutStyle(0, columnLayoutStyle);
复制代码


成功设置并显示,如图:

4、选中表格第一个单元格,点击“清除”按钮执行清除操作,如图:

5、重新执行第三步代码,设置表格第一列单元格类型,设置后样式未刷新,如图:


二、在通过workbook.fromJSON加载的sheet模版中设置表格列单元格类型
1、通过workbook.fromJSON加载的sheet模版,模板中有一个表格,和第一项中的表格同理;
2、使用以下代码设置表格第一列的单元格类型:
  1. const workbook = designer?.getWorkbook() as any;
  2. const sheet = workbook.getActiveSheet();
  3. sheet?.setValue(3, 2, false);
  4. const table = sheet.tables.find(3, 2);
  5. const columnLayoutStyle = table.columnLayoutStyle(0) as GC.Spread.Sheets.Tables.ITableLayoutStyle;
  6. columnLayoutStyle.data = new GC.Spread.Sheets.Style();
  7. // @ts-ignore
  8. columnLayoutStyle.data.cellType = new BoolCellType();
  9. table.columnLayoutStyle(0, columnLayoutStyle);
复制代码
3、表格设置后未刷新样式,和第一项遇到问题同理



附件: 您需要 登录 才可以下载或查看,没有帐号?立即注册

4 个回复

Richard.HuangSpreadJS 开发认证
超级版主   /  发表于:6 天前
沙发
您的问题我分开进行回复。
1. 清除之后无法设置单元格类型的问题我本地已经复现,下来需要进行进一步调研,调研结束后我会在本贴中进行进一步沟通和回复
2. 该场景应该是在清除之后做的文件保存,然后fromJSON之后执行同样代码没有修改。这本质和上面是同样的情况。
回复 使用道具 举报
是的,本质是一回事,等你好消息
回复 使用道具 举报
Richard.HuangSpreadJS 开发认证
超级版主   /  发表于:6 天前
地板
清风沐阳 发表于 2026-1-9 17:02
是的,本质是一回事,等你好消息

回复 使用道具 举报
Richard.HuangSpreadJS 开发认证
超级版主   /  发表于:前天 09:20
5#
您好,调研结果出来了,本质上是设计器上的清除按钮会将单元格上的样式设置为null,造成样式的集成打断。因此您后续用programming设置table样式会造成无法继承的问题。解决这个问题也很简单,在设置样式之前,调用clear将单元格样式设置为初始状态就行了,代码如下:
  1. var table = sheet.tables.all()[0]
  2. sheet.clear(table.dataRange().row,table.dataRange().col,table.dataRange().rowCount,1,GC.Spread.Sheets.SheetArea.viewport,GC.Spread.Sheets.StorageType.style);
  3. var cellType2 = new GC.Spread.Sheets.CellTypes.ComboBox();
  4. cellType2.items(["a","b","c"]);
  5. var columnLayoutStyle = table.columnLayoutStyle(0)
  6. columnLayoutStyle.data = new GC.Spread.Sheets.Style();
  7. columnLayoutStyle.data.cellType = cellType2;
  8. table.columnLayoutStyle(0, columnLayoutStyle);
复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部