某些电子表格公式,如ImportRange
和ImportXml
(以及 Apps 脚本自定义公式)仅在有人登录电子表格时才进行评估。就像这些功能需要一个帐户来评估,例如,在importRange
登录的帐户中必须有权访问正在导入的范围,如果您与某人而不是importRange
源共享此电子表格,当此人查看此电子表格时,importRange
函数将不起作用(好吧,除非您也在电子表格中并且已经对公式进行了评估)。
底线是,您不能拥有此公式并使用在时间驱动上触发的脚本(或其他不需要有人登录的触发器)并期望脚本能够读取此数据。
解决方法虽然很简单。执行该importRange
函数在脚本中的作用!例如
var source = SpreadsheetApp.openById('source-spreadsheet-key');
var data = source.getSheetByName('List').getRange('I6:AT500').getValues();
//then save it somewhere
var s = Spreadsheet.getActive().getSheetByName('hidden-import');
s.getRange('I6:AT500').setValues(data);
SpreadsheetApp.flush(); //force the data to be written
//so all the other formulas on your spreadsheet get updated with the new data
脚本难以模仿的所有“逻辑”公式,例如query
and ,都可以留在电子表格中,但请参考我刚刚发明的这个“隐藏导入”表,而不是直接嵌套。vmerge
importRange
[编辑]
要仅复制非空行,请执行以下操作:
var data = SpreadsheetApp.openById('source-spreadsheet-key').
getSheetByName('List').getDataRange().getValues();
Spreadsheet.getActive().getSheetByName('hidden-import').
getRange(1,1,data.length,data[0].length).setValues(data);