我有两张电子表格,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表在内部使用一些引用ID引用的,而不是它的名称。如何以编程方式更新内部参考?
更新:我的问题被确定为另一个问题的可能重复,该问题在其公式中使用“间接”。我不在我的电子表格中使用“间接”,它将地址作为字符串接收并返回引用地址。这不是我正在寻找的功能,所以我不能将它添加到我的工作表公式。我确实尝试了该问题的建议解决方案(使用IFERROR),但它也没有帮助。我只是在出错时返回null值。
答案 0 :(得分:0)
这个解决方法怎么样?虽然我不确定这对你的情况是否有用,你能尝试一下吗?此解决方法的流程如下:
SpreadsheetApp.flush()
无法用于此情况。I tried copying the formulas and pasting them back via Apps-Script, but it didn't work.
因此,通过使用复制的“Calculations_temp”覆盖“计算”表,我尝试更新公式。
var srcId = "#####"; // File ID of "Materials"
var dstId = "#####"; // File ID of "Calculations"
var src = SpreadsheetApp.openById(srcId).getSheetByName("Materials");
var dstSheet = SpreadsheetApp.openById(dstId);
// Copy "Materials" to destination sheet.
src.copyTo(dstSheet).setName("Materials");
// Copy "Calculations" to destination sheet as the name of "Calculations_temp".
dstSheet.getSheetByName("Calculations").copyTo(dstSheet).setName("Calculations_temp");
// Copy data of "Calculations_temp" to "Calculations".
// var range = dstSheet.getSheetByName("Calculations").getDataRange(); // I confirmed that this didn't work.
var range = dstSheet.getSheetByName("Calculations_temp").getDataRange();
range.copyTo(dstSheet.getSheetByName("Calculations").getDataRange());
// Delete "Calculations_temp".
dstSheet.deleteSheet(dstSheet.getSheetByName("Calculations_temp"));
如果这对你没用,我很抱歉。