【发布时间】:2018-03-14 23:13:08
【问题描述】:
我有两个电子表格 A 和 B,我正在编写一个脚本来将它们与每个业务部门的自定义合并。
电子表格 A 包含一个“计算”工作表,其中的公式引用了一个名为“材料”的工作表,但它不包含“材料”工作表。
我编写了将“材料”表从电子表格 B 复制到电子表格 A 的脚本。
var materialsSheet = spreadSheetB.getSheetByName("Materials");
materialsSheet.copyTo(spreadSheetA).setName("Materials");
但是,SpreadsheetA 中“计算”表上的公式仍然抱怨“未找到材料”表。如果我手动进入前端并模拟编辑,单元格中的值会更新。
我尝试复制公式并通过 Apps-Script 将它们粘贴回去,但它不起作用。有关如何使其工作的任何建议?
var readRange = calcSheet.getRange(9,1,7,6);
readRange.copyTo(calcSheet.getRange(9,1,7,6));
另一种思路:我的猜测是“材料”表在 G-sheets 内部使用一些参考 ID 进行引用,而不是其名称。如何以编程方式更新内部引用?
更新:我的问题被确定为另一个问题的可能重复项,该问题在其公式中使用“间接”。我不在电子表格中使用“间接”,它将地址作为字符串接收并返回参考地址。这不是我正在寻找的功能,所以我无法将它添加到我的工作表公式中。我确实尝试了针对该问题的建议解决方案(使用 IFERROR),但它也没有帮助。我只是在出错的情况下返回 null 值。
【问题讨论】:
-
当你说“如果我手动进入前端并模拟编辑,单元格中的值会更新”,你的意思是在编辑后,你的公式中的引用能够找到复制的工作表,但在那之前他们不能?
-
@Argyll 您的理解是正确的。该公式需要在前端进行虚假编辑才能使其工作。使用 Google Apps-Script 将公式复制/粘贴回工作表没有相同的效果。
-
你试过
flush()吗? -
我没有尝试flush(),但是我手动重新加载了几次电子表格,但没有任何影响。我猜手动重新加载比 flush() 做的事情更多,所以我会看到它,对吧?
-
@J.Doe:我不确定是不是这样。手动重新加载正在再次打开工作表。某些更新可能由编辑触发。试试
flush看看是否有效?
标签: google-apps-script google-sheets