1

我有一个电子表格,它使用 Vmerge 和 Query 公式从其​​他 6 个电子表格中提取和累积所有必需的数据,所有合并的数据将转换为 pdf 并使用触发事件通过电子邮件发送到邮件 ID。

每次发布的附件邮件都包含所有标题和其他格式时,这里开始出现问题,但是提取的数据没有出现。似乎-打开同一个电子表格,一段时间后所有-(连字符)都被数据替换/希望在打开电子表格一段时间后所有数据更新。

表格链接

截屏

谁能指导我解决这个问题。

对于这个解决方案应该是 -> 应该更新所有数据,然后电子邮件脚本应该可以工作;或者它应该在电子邮件脚本开始之前更新。

或任何其他更好的想法表示赞赏。

4

1 回答 1

2

某些电子表格公式,如ImportRangeImportXml(以及 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

脚本难以模仿的所有“逻辑”公式,例如queryand ,都可以留在电子表格中,但请参考我刚刚发明的这个“隐藏导入”表,而不是直接嵌套。vmergeimportRange

[编辑]

要仅复制非空行,请执行以下操作:

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);
于 2012-05-28T11:41:48.337 回答