Google apps script .getValue()有时在读取ImportXML单元格时返回#N/A

Google apps script .getValue()有时在读取ImportXML单元格时返回#N/A,google-apps-script,google-sheets,google-sheets-importxml,Google Apps Script,Google Sheets,Google Sheets Importxml,我编写了一个脚本,将ImportXML公式写入一个单元格,然后在几秒钟后尝试读取该单元格并用其返回值替换它 问题是,当用获取的值替换单元格时,我经常(但并非总是)得到N/A。问题是,我能够在短时间内看到正确的值,因此值通过ImportXML获取并正确返回,当重写到电子表格时,它会变得一团糟 示例代码: myformula = '=ImportXML("http://api.something/01.xml","/offers/price")'; sheet.getRange("A1").setF

我编写了一个脚本,将ImportXML公式写入一个单元格,然后在几秒钟后尝试读取该单元格并用其返回值替换它

问题是,当用获取的值替换单元格时,我经常(但并非总是)得到N/A。问题是,我能够在短时间内看到正确的值,因此值通过ImportXML获取并正确返回,当重写到电子表格时,它会变得一团糟

示例代码:

myformula = '=ImportXML("http://api.something/01.xml","/offers/price")';
sheet.getRange("A1").setFormula(myformula);
Utilities.sleep(5000);
sheet.getRange("A1").setValue(sheet.getRange("A1").getValue());
我注意到,当URL最近被获取(并且被Google内部缓存)时,它得到的值是正确的


关于如何解决此问题的建议?

您的脚本无法收到电子表格已完成重新计算的通知。重新计算所用的时间是不确定的。显然,您的5秒延迟通常足够了,但有时recalc需要更长的时间

用重试循环替换
sleep()
,以延长时间窗口

myformula = '=ImportXML("http://api.something/01.xml","/offers/price")';
sheet.getRange("A1").setFormula(myformula);
while (sheet.getRange("A1").getValue() === "#N/A") {
  Utilities.sleep(5000);
}
sheet.getRange("A1").setValue(sheet.getRange("A1").getValue());

但就像我说的,每次它执行时,我都会在单元格中看到正确的值,然后在我重写它之后,它会得到#N/A。换句话说,如果我不重写值,我会在不到一秒钟的时间内在单元格中看到结果2013年1月14日19时32分

这是云计算现实的一部分。正在更新电子表格对象,并与正在处理原始数据缓存副本的所有查看者共享。缓存的副本与原始副本同步,但这不是即时的。查看工作表时,您是一个用户。您的脚本正在另一台google服务器上“在云中”执行,虽然它最终会看到与您相同版本的电子表格,但可能需要一段时间。让两个用户进行更改(您+脚本)需要多次同步操作,因此有时受影响的单元格将处于不确定状态

有一个类似的例子,在评论中有一些解决办法