首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >某些电子表格单元格在触发函数发送电子邮件之前未更新

某些电子表格单元格在触发函数发送电子邮件之前未更新
EN

Stack Overflow用户
提问于 2012-05-25 14:19:44
回答 1查看 290关注 0票数 1

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

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

link for sheet

有谁可以指导我解决这个问题。

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

或者任何其他更好的想法都是值得欣赏的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-05-28 19:41:48

一些电子表格公式,如ImportRangeImportXml (以及应用程序脚本自定义公式),只有在有人登录到电子表格中时才会计算。就像这些函数需要一个帐户进行评估一样,例如,在importRange中,登录的帐户必须有权访问要导入的范围,如果您与某人共享此电子表格,而不是与importRange源共享此电子表格,当此人查看此电子表格时,importRange函数将不起作用(除非您也在电子表格中并且公式已经被评估)。

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

不过,解决方法非常简单。执行importRange函数在脚本中执行的操作!例如:

代码语言:javascript
复制
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

编辑

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

代码语言:javascript
复制
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);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10749427

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档