找回密码
 立即注册

QQ登录

只需一步,快速开始

[处理中] 16.2 表内计算

billdwl
金牌服务用户   /  发表于:2024-4-24 17:35  /   查看:228  /  回复:5


看到可以设置表内停止计算,手动输入对应单元格数值,也不会触发公式
有没有办法只设置某个sheet停止计算,不影响其他sheet页的
image.png55288390.png

5 个回复

倒序浏览
Joestar.XuSpreadJS 开发认证
超级版主   /  发表于:2024-4-24 17:44:53
沙发
您好,要实现这样的需求其实就是您图中框选的代码:

  1. sheet.suspendCalcService()
复制代码


它将会关闭sheet这个对象的计算引擎,从而实现停止计算的目的。
SpreadJS 17.0.8 | GcExcel 7.1.1 已发布~
回复 使用道具 举报
billdwl
金牌服务用户   /  发表于:2024-4-24 17:52:39
板凳
Joestar.Xu 发表于 2024-4-24 17:44
您好,要实现这样的需求其实就是您图中框选的代码:

但是我设置了sheet.suspendCalcService()后,所有sheet页都停止计算了,而不只是当前sheet停止计算
回复 使用道具 举报
不吐葡萄皮
注册会员   /  发表于:2024-4-24 18:00:26
地板
楼主可以试试手动计算+spread.calculate 的方法,

https://demo.grapecity.com.cn/spreadjs/SpreadJSTutorial/features/calculation/calc-service/purejs
回复 使用道具 举报
billdwl
金牌服务用户   /  发表于:2024-4-25 09:39:32
5#
不吐葡萄皮 发表于 2024-4-24 18:00
楼主可以试试手动计算+spread.calculate 的方法,

https://demo.grapecity.com.cn/spreadjs/SpreadJ ...

手动计算,好像也只能设置整张表所有sheet都手动计算
回复 使用道具 举报
Joestar.XuSpreadJS 开发认证
超级版主   /  发表于:2024-4-25 12:24:10
6#
您好,这边调研了一下,您可以参考下面的代码来实现:

  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.   spread.setSheetCount(2);

  11.   let sheet = spread.getActiveSheet();

  12.   sheet.setValue(0, 0, 1);
  13.   sheet.setValue(1, 0, 2);
  14.   sheet.setValue(2, 0, 3);

  15.   sheet.setFormula(0, 1, "=SUM(A1:A3)");

  16.   let flag;
  17.   const editingFormula = {};
  18.   document.querySelector("#button1").addEventListener("click", function () {
  19.     console.log("stop calcService");
  20.     let spread = designer.getWorkbook();
  21.     let sheet = spread.getActiveSheet();
  22.     sheet.bind(GC.Spread.Sheets.Events.CellChanged, function (e, info) {
  23.       if (info.propertyName == "formula") {
  24.         if (flag) {
  25.           flag = false;
  26.           return;
  27.         }

  28.         let key = `${info.row},${info.col}`;
  29.         if (editingFormula[key]) {
  30.           editingFormula[key].data = info.text;
  31.         } else {
  32.           editingFormula[key] = {
  33.             row: info.row,
  34.             col: info.col,
  35.             data: info.newValue,
  36.           };
  37.         }

  38.         flag = true;
  39.         sheet.setFormula(info.row, info.col, null);
  40.         sheet.setValue(info.row, info.col, null);
  41.       }
  42.     });
  43.   });

  44.   document.querySelector("#button2").addEventListener("click", function () {
  45.     console.log("resume calcService");
  46.     let spread = designer.getWorkbook();
  47.     let sheet = spread.getActiveSheet();

  48.     sheet.unbind(GC.Spread.Sheets.Events.CellChanged);

  49.     for (const key in editingFormula) {
  50.       sheet.setFormula(
  51.         editingFormula[key].row,
  52.         editingFormula[key].col,
  53.         editingFormula[key].data
  54.       );
  55.     }
  56.   });
  57. };
复制代码


动画 (1).gif306685790.png
SpreadJS 17.0.8 | GcExcel 7.1.1 已发布~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部