找回密码
 立即注册

QQ登录

只需一步,快速开始

qwedcxzas

金牌服务用户

49

主题

168

帖子

511

积分

金牌服务用户

积分
511
qwedcxzas
金牌服务用户   /  发表于:2024-4-26 13:21  /   查看:225  /  回复:6
本帖最后由 Ellia.Duan 于 2024-4-29 15:39 编辑

产品:SpreadJS
版本:V16

您好,咨询个问题,从WPS或者Excel复制粘贴到SpreadJS表格时, 怎么防止表格内的公式被覆盖呢
image.png48128050.png
比如截图,用户 从Excel上ctrl + c 复制到 表格,公式就被覆盖了

或者说 遇到表格内的公式 直接跳过

6 个回复

倒序浏览
Joestar.XuSpreadJS 开发认证
超级版主   /  发表于:2024-4-26 14:05:17
沙发
您好,原生上没有相关的配置,我这边通过事件实现了您的这个需求,请参考:

  1. window.onload = function () {
  2.   let designerConfig = JSON.parse(
  3.     JSON.stringify(GC.Spread.Sheets.Designer.DefaultConfig)
  4.   );

  5.   let designer = new GC.Spread.Sheets.Designer.Designer(
  6.     "gc-designer-container",
  7.     designerConfig
  8.   );

  9.   let spread = designer.getWorkbook();

  10.   let sheet = spread.getActiveSheet();

  11.   let formulaArray;
  12.   sheet.bind(GC.Spread.Sheets.Events.ClipboardPasting, (sender, args) => {
  13.     console.log(args);
  14.     let { cellRange } = args;
  15.     formulaArray = traverseCellRangeIfFormula(
  16.       sheet,
  17.       cellRange.row,
  18.       cellRange.col,
  19.       cellRange.rowCount,
  20.       cellRange.colCount
  21.     );
  22.   });

  23.   sheet.bind(GC.Spread.Sheets.Events.ClipboardPasted, (sender, args) => {
  24.     console.log(formulaArray);
  25.     for (const key in formulaArray) {
  26.       sheet.setFormula(
  27.         formulaArray[key].row,
  28.         formulaArray[key].col,
  29.         formulaArray[key].formula
  30.       );
  31.     }
  32.   });
  33. };

  34. function traverseCellRangeIfFormula(sheet, row, col, rowCount, colCount) {
  35.   let result = {};
  36.   for (let i = row; i < row + rowCount; i++) {
  37.     for (let j = col; j < col + colCount; j++) {
  38.       let cell = sheet.getCell(i, j);
  39.       if (cell.formula()) {
  40.         let key = `${i},${j}`;
  41.         if (result[key]) {
  42.           result[key].formula = cell.formula();
  43.         } else {
  44.           result[key] = {
  45.             row: i,
  46.             col: j,
  47.             formula: cell.formula(),
  48.           };
  49.         }
  50.       }
  51.     }
  52.   }
  53.   return result;
  54. }
复制代码


动画 (1).gif665427856.png
SpreadJS 17.0.8 | GcExcel 7.1.1 已发布~
回复 使用道具 举报
qwedcxzas
金牌服务用户   /  发表于:2024-4-26 14:16:58
板凳
十分感谢,我测试一下回复
回复 使用道具 举报
Joestar.XuSpreadJS 开发认证
超级版主   /  发表于:2024-4-26 14:30:30
地板
好的。
SpreadJS 17.0.8 | GcExcel 7.1.1 已发布~
回复 使用道具 举报
Joestar.XuSpreadJS 开发认证
超级版主   /  发表于:2024-4-28 13:37:16
5#
您好,请问您的问题是否已经解决,如果仍未解决,欢迎继续回帖,我们来协助调研。
SpreadJS 17.0.8 | GcExcel 7.1.1 已发布~
回复 使用道具 举报
qwedcxzas
金牌服务用户   /  发表于:2024-4-28 18:34:59
6#
还没来得及测试,晚点回复
回复 使用道具 举报
Joestar.XuSpreadJS 开发认证
超级版主   /  发表于:2024-4-28 20:57:08
7#
好的。
SpreadJS 17.0.8 | GcExcel 7.1.1 已发布~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部