Javascript 运行sheets daily脚本时预加载自定义函数

Javascript 运行sheets daily脚本时预加载自定义函数,javascript,google-apps-script,Javascript,Google Apps Script,我正在谷歌电子表格中使用“加密金融”自定义功能。我已经编写了一个自定义脚本,它使用应用程序脚本的触发器功能每天运行 function daily(){ SpreadsheetApp.flush(); var ss=SpreadsheetApp.getActiveSpreadsheet(); var sh=ss.getSheetByName(“流动性”); var值=sh.getRange(“B36”).getValue(); var lastRow=whichRow(); lastRow+=1

我正在谷歌电子表格中使用“加密金融”自定义功能。我已经编写了一个自定义脚本,它使用应用程序脚本的触发器功能每天运行

function daily(){
SpreadsheetApp.flush();
var ss=SpreadsheetApp.getActiveSpreadsheet();
var sh=ss.getSheetByName(“流动性”);
var值=sh.getRange(“B36”).getValue();
var lastRow=whichRow();
lastRow+=1;
ss.getSheetByName(“随时间变化的流动性”).getRange(“B”+lastRow”).setValue(值);
ss.getSheetByName(“随时间变化的流动性”).getRange(“A”+lastRow).setValue(新日期());
}
函数whichRow(){
var ss=SpreadsheetApp.getActiveSpreadsheet();
var Avals=ss.getSheetByName(“随时间变化的流动性”).getRange(“A1:A”).getValues();
var Alast=Avals.filter(String).length;
返回Alast;

}
您需要打开电子表格,然后将其设置为活动:

var ss = SpreadsheetApp.openById("1234567890");
SpreadsheetApp.setActiveSpreadsheet(ss);

简短回答 On时间驱动触发器避免使用调用函数,甚至是使用getActiveSpreadsheet和其他“get-active”方法的自定义函数。而是使用openById或其他类似的方法

解释 SpreadsheetApp.flush()确保应用对脚本所做的挂起更改,因此将其作为函数的第一个操作是没有意义的


另一方面,在Google Apps脚本上,打开电子表格的用户确定哪个电子表格是活动的,On time driven triggers getActiveSpreadsheet返回null,换句话说,“活动”意味着“此时被用户使用”。

您的代码对我来说很好。也许可以在全新的床单上试一试。可能是单元格格式导致了错误。当我手动运行它时,它对我也很好。当它被每日触发器运行时,它就不工作了。谢谢你的澄清。我将使用openById进行测试,看看它是否解决了这个问题。这是正确的答案和代码。下面的答案也很有帮助。