简化场景:
工作表 Customer_Orders,具有行块,每行都有产品代码、订购数量和尺寸。 一堆其他的东西是根据这三个花絮来查找/计算的。到本季结束时,该表大约有 5000 行。
工作表 Raw_Inventory 在前 500 行中包含年份开始,然后对 Customer_orders 进行查询。到季末,这张表大约有 2000 行。
据我所知,每次我更改 Cust_Orders 中的 3 个字段之一时,都会运行此查询。
Sheet Inv_Status 是针对 Raw_Inventory 运行的数据透视表,而且,我认为每次修改 Raw_Inventory 时,都会重新计算数据透视表。 (还有几个其他数据透视表使用相同的数据。)
结果是,对 Cust_Orders 进行更改可能会导致长达 2 分钟的时间,而计算会赶上。
(硬件:Mac Pro、24 GB 内存、3.2 GHz、4 核;当前版本的 Chrome 在 Yosemite 下运行)
我想做的是以下其中一项:
部分解决方法:
我创建了一个导入 raw_Inventory 的新工作表。 该副本用于数据透视表。 ImportRange 仅每 30 分钟运行一次。
下一步将用无数个简单的赋值语句替换查询。 我希望当我在 Cust_Orders 中进行更改时,这将用查询单行代替查询 3000 行。
我有一个类似的问题,我通过创建一个启用单元格来解决它,并在该单元格中输入 0 或 1,然后在公式中使用该单元格。以这样的方式:
A | B | |
---|---|---|
1 | 启用公式 | 0 |
2 | = if(B1=0; 0; 复杂公式1) | = if(B1=0; 0; 复杂公式2) |
3 | = if(B1=0; 0; 复杂公式1) | = if(B1=0; 0; 复杂公式2) |
这样,当我需要更改电子表格时,我会禁用公式(在 A1 上放置 0),更改电子表格,最后启用公式(在 A1 上放置 1)。
这不是最好的解决方案,但它对我有用。
无法在 Google 表格中禁用自动重新计算。一种选择是通过仅使用复制/粘贴作为值或使用脚本来用值替换公式。使用脚本的优点是,它还可以用于在需要时再次添加公式。
相关
这不是我原来的问题——如何控制重新计算的答案,而是一种解决方法,最终是一个更好的解决方案。
快速重述问题:
CustOrders 从 RawInv 表中删除了库存描述。
RawInv 从 CustOrders 更新。 这不完全是循环依赖,因为 RawInv 仅更新 CustOrders 的数量。 但这意味着只要 CustOrders 发生更改,就需要重新计算 RawInv。
每行一个查询创建描述会让情况变得更糟。
解决方案就是重构。
为了解决这个问题,我编写了一个简单的脚本:
function triggeredCalc() {
//calculate sum in column A below A1 in a temporary cell
//then copy the result into the result cell and clear the temporary cell
sheet = SpreadsheetApp.getActive();
tempRange = sheet.getRange('B1:B1');
resultRange = sheet.getRange('A1:A1');
tempRange.setValue('=SUM($A2:$A)');
resultRange.setValue(tempRange.getValue());
tempRange.setValue("");
}