触发功能发送电子邮件之前,某些电子表格单元格未更

时间:2012-05-25 06:19:44

标签: google-apps-script google-sheets

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

每次发布​​的附件邮件包含所有标题和其他格式时,问题就会出现,但是不会显示提取的数据。看起来好像-打开同一个电子表格,过了一段时间所有-(连字符)都被数据取代/希望所有数据更新一段时间后打开电子表格。

link for sheet

screenshot

任何人都可以指示我解决这个问题。

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

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

1 个答案:

答案 0 :(得分:2)

某些电子表格公式(例如ImportRangeImportXml(以及Apps脚本自定义公式)仅在有人登录电子表格时进行评估。就像这些功能需要评估帐户,例如,在importRange中,如果您与某人但不是importRange来源共享此电子表格,则登录的帐户必须有权访问要导入的范围,当此人正在查看此电子表格时,importRange功能将无效(除非您也在电子表格中并且公式已经过评估)。

最重要的是,您不能拥有此公式并使用按时间驱动(或其他不需要某人登录的触发器)触发的脚本,并期望脚本能够读取此数据。

虽然解决方法非常简单。执行importRange函数在脚本中执行的操作! e.g。

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

所有“逻辑”公式,例如queryvmerge,这些脚本难以模仿,可以保留在电子表格中,但是我只是引用这个“隐藏导入”表单发明而不是直接嵌套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);