0

I have recently adopted the mail merge scripts from googleapps developer blog.

Script 2 in http://googleappsdeveloper.blogspot.hk/2011/10/4-ways-to-do-mail-merge-using-google.html

There are 4 gs files in the script where one is unnecessary and I just comment the whole script and it runs perfectly fine.

Then I attempted to copy all the contents from "UI for Standard.gs" to "Code.gs". After doing so, I deleted "UI for Standard.gs".

The script then does not run. It can no longer send out mails.

Any ideas on what might go wrong when merging scripts?

Thanks!

4

1 回答 1

2

.gs如果将单独文件中的所有代码忠实地复制到单个文件中,则脚本没有理由停止运行.gs。(虽然没有很好的理由这样做。事实上,像 Romain 在本例中所做的那样分隔代码是一种很好的做法。)

你可知道?当一个包含多个“文件”的脚本运行时,整个脚本被“加载”并运行。对于机器来说,多个 gs 文件的存在是没有意义的——它们只是为了方便作者。所有文件中的所有函数和全局变量都可用于每个单独文件中的代码。函数范围之外的所有语句都会被执行。(因此,如果您var sheet = SpreadsheetService.getActiveSheet()在每个 gs 文件的顶部都有类似的内容,它将执行多次 - 您只需要一个。)

此时您的选择是:

  • 确保您的数据仍然有效。也许代码没有问题。
  • 查看运行失败后的执行记录,看看你是否能找到出错的线索。至少,你会知道它停在哪里。
  • 检查您的手动合并,与原始代码进行比较,以确保您已正确复制代码。如果您对此有第二双眼睛,那就更好了。
  • 使用调试器或记录器仔细检查processRow()-merge()前者是发送电子邮件的唯一地方,后者执行主要的合并操作。由于观察到的问题是未发送电子邮件,因此从这里开始调试是有意义的。
  • 回到原点,重新开始。

关于合并脚本时可能出现什么问题的任何想法?

  • 放错位置的大括号 ({}) 会改变数据结构和函数。

  • gs 中允许函数的多个副本,尽管只有底部的一个会执行。在这种情况下,您不会收到任何错误消息,但事情可能不会按照您的预期进行。(最初的 YAMM2 脚本没有重复的函数名称,但我在图库中看到了其他脚本。)

    例如,如果您将伴随 gs 文件中的函数复制到 Code.gs 中,然后在原始文件中注释掉函数的 BODIES,则对这些函数中的任何一个的调用都会执行伴随文件中的空版本,而不是在 Code.gs 中复制。

  • 操作员错误。我们都去过那里。

于 2013-08-23T17:30:56.923 回答