一些电子表格公式,例如importRange
和importXml
(以及Apps Script自定义公式),仅在电子表格中登录某人时才被评估。这些函数似乎需要从 importRange
等账户中评估一个账户,如果与某人共享这个电子表格,而不是 importRange
源,当这个人查看这个电子表格时,这些函数将无效(除非您在电子表格中重新填写,且公式已经评估过) 。
底线是,您不能拥有此公式,而使用时间驱动触发的脚本(或其他不要求某人登录的触发器),并期望脚本能够读取这些数据。
工作变通很简单。 执行您脚本中的 < code> importRange code> 函数 。 例如 。
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
您的所有“ logic” 公式, 如 < code> query code > 和 < code> vmerge code >, 对脚本难以模仿, 可以留在电子表格中, 但请直接引用我刚刚发明的“ 隐藏- 进口” 表格, 而不是嵌入 < code > importRange code > 。
<强> 强> 强>[编辑] 强>
只复制非空行会这样 :
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);