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

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

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

工作表的链接

screenshot

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

For this solution should be -> all the data should be updated and then the email script should work; or either it should update before emailing script starts.

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

1
额外 编辑
意见: 1
是的,它是一个应用程序脚本。你有没有经历过
额外 作者 Jimson Jose,
是的,我已经做到了。谢谢
额外 作者 Jimson Jose,
您提到的这个脚本是Google Apps脚本吗?
额外 作者 Henrique G. Abreu,
您是否也可以 getLastRow 工作?
额外 作者 Henrique G. Abreu,

1 答案

某些电子表格公式,例如 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

所有你的“逻辑”公式,比如 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);
2
额外
感谢您的支持和建议。同样,你可以引导我一个脚本,只复制不空的行。因为脚本也在复制所有内容,包括空的。
额外 作者 Jimson Jose,
再次感谢你,我只是在试图从指定的(第一列和第一列到第+列)中提取,例如i7:AT + {最后一行}。但我无法做到。你能帮我解决吗?
额外 作者 Jimson Jose,
谢谢你为我为亨利克阿布雷乌先生所做的一切。我希望你能理解我的问题。我已经尝试过,但我的疑问是如何提取行'code'var data = source.getSheetByName('List')。getRange('I6:AT500')。getValues&zwnj;();之前的最后一行数。被执行。这我只要求。如果你愿意或不愿意,我很感激并感谢你的行为。请注意,我不是坚持你,根据我的知识,我只是要求帮助。如果我用英语伤害你,我非常抱歉。
额外 作者 Jimson Jose,
非常感谢你指导我。说实话,直到现在我从来不知道邻接“投票”,现在我肯定会回答和投票。如前所述,提取非空行。我已经尝试过,但脚本正在复制包括空行在内的所有数据。你能否再次为我确认一下。提前致谢
额外 作者 Jimson Jose,
在你的指导下,我已经投票给所有帮助我完成脚本工作的人。再一次感谢你。
额外 作者 Jimson Jose,
我已经将这个包含在我的答案中。
额外 作者 Henrique G. Abreu,
从我粘贴的片段中,您应该可以自己做到这一点。你所问的不再是怀疑,你只是想让我为你做。您应该阅读Apps Script教程和文档以了解如何自行完成: developers.google。 COM /应用程序脚本/文章
额外 作者 Henrique G. Abreu,
好吧,对于严厉的对话感到抱歉。请看这里的文档: developers.google.com/apps-script/class_sheet# getLastRow (顺便说一下,我发现你从来没有在接受过的计算器上标记你的问题的答案,你应该这样做,当你觉得你有一个很好的答案,投票也很重要)。
额外 作者 Henrique G. Abreu,