请选择 进入手机版 | 继续访问电脑版
 找回密码
 立即注册

QQ登录

只需一步,快速开始

Joestar.Xu SpreadJS 开发认证
超级版主   /  发表于:2025-5-6 12:24  /   查看:34  /  回复:0
在ReportSheet中,我们经常会使用隐藏列存放主键字段。

且用于数据录入的主键应该是唯一的。

但是在报表中复制粘贴时,如果范围包含隐藏列,则隐藏的主键也被复制粘贴,提交的结果将会出现错误。

如下图:

1、在单元格 J8 中输入 =C8 以显示隐藏的 productId(主键)。

image.png37614134.png

2、预览报表。

image-1.png196742858.png

3、选择第一条数据并使用 Ctrl+C 复制。

image-2.png204507445.png

4、选择第二条数据,然后按 Ctrl+V 粘贴。

image-3.png582736510.png

可以看到隐藏的产品 ID 也被复制并粘贴了,这可能在普通的工作表中是正确的,但对于ReportSheet的数据来说,主键不应该被随便更改。

那么有没有什么方法可以防止隐藏单元格被复制呢?

我们可以通过重写复制的方法来实现这个功能。

具体来说,我们会在复制的过程中执行仅选择可视单元格的指令,来避免复制隐藏单元格。

代码如下:

  1. let copyExecuteFn = GC.Spread.Sheets.Commands.copy.execute;
  2. GC.Spread.Sheets.Commands.copy.execute = function(context, options) {
  3.     context.commandManager().execute({cmd:"selectVisibleCells", sheetName: context.getActiveSheet().name()});
  4.     return copyExecuteFn(context, options);
  5. };
  6. let designer = new GC.Spread.Sheets.Designer.Designer('dss');
  7. let spread = designer.getWorkbook();
复制代码


这样一来,我们就可以防止隐藏单元格被复制了,避免后续出现主键重复导致的无法提交的情况。

0 个回复

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