Javascript 如何确保附加到自动电子邮件的PDF是最新信息?

Javascript 如何确保附加到自动电子邮件的PDF是最新信息?,javascript,google-apps-script,Javascript,Google Apps Script,这是我通过GoogleApps脚本创建的流程 有人用谷歌的形式写他们的信息 信息存储在电子表格中 发票在电子表格中创建,包含收到的最新信息 发票将自动转换为PDF格式 最新发票附在自动发送电子邮件中 此人在提交谷歌表单后会收到一封附有发票的自动电子邮件 问题是,当有人提交谷歌表单时,他们会收到一张发票,但他们收到的是来自之前信息的发票。然后重复这一点。当有人提交时,发票中的信息来自前一个人 我是谷歌脚本的初学者,所以我不知道为什么会发生这种情况 这是我用来发送自动电子邮件的代码。我已经最小化了代

这是我通过GoogleApps脚本创建的流程

有人用谷歌的形式写他们的信息 信息存储在电子表格中 发票在电子表格中创建,包含收到的最新信息 发票将自动转换为PDF格式 最新发票附在自动发送电子邮件中 此人在提交谷歌表单后会收到一封附有发票的自动电子邮件 问题是,当有人提交谷歌表单时,他们会收到一张发票,但他们收到的是来自之前信息的发票。然后重复这一点。当有人提交时,发票中的信息来自前一个人

我是谷歌脚本的初学者,所以我不知道为什么会发生这种情况

这是我用来发送自动电子邮件的代码。我已经最小化了代码

function for_users2() {

 var title = "【お問い合わせありがとうございます】";

 var name = '名前'; 
 var mail = 'メールアドレス'; 
 var address = "";

 var sheet = SpreadsheetApp.getActiveSheet();
 var row = sheet.getLastRow();
 var column = sheet.getLastColumn();
 var range = sheet.getDataRange();
 var TIMESTAMP_LABEL = 'タイムスタンプ';

 for (var i = 1; i <= column; i++ ) {

 var item = range.getCell(1, i).getValue();


 var value = range.getCell(row, i).getValue();

 if ( item === TIMESTAMP_LABEL ) {
 item = 'お問い合わせ日時';
 }

 if ( item === 'お問い合わせ日時' ) {
 value = Utilities.formatDate(value, 'Asia/Tokyo',"YYYY'年'MM'月'dd'日'HH'時'mm'分'ss'秒'");
 }


 body += "■"+item+"\n";


 body += value + "\n\n";


 if ( item === name ) {
 body = value+" 様\n\n"+body;
 }


 if ( item === mail ) {
 address = value;
 }
 }

 body += body2;

var token = ScriptApp.getOAuthToken();
var pdf = UrlFetchApp.fetch("https://docs.google.com/spreadsheets/d/OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO/export?exportFormat=pdf&format=pdf&size=A4&portrait=true&fitw=true&sheetnames=false&printtitle=false&pagenumbers=false&gridlines=false&fzr=false&gid=00000000000", {headers: {'Authorization': 'Bearer ' +  token}}).getBlob().setName('請求書');



  GmailApp.sendEmail(
    address,
    title,
    body,
    {
      attachments: [pdf],
      name: 'Automatic Emailer Script'
    }
 );
  }


There is no error. It's just that the invoice attached is from one previous customer.

如果SpreasheetApp.flush似乎不起作用,那么您当然应该转到onFormSubmit-Installable触发器

通过这种方式,您可以处理表单中的精确值,并使用与现在使用的相同的函数。您可以使用以下命令从表单提交中获取值,而不是获取最后一行值

var name = e.namedValues['Name'][0]; var email = e.namedValues['Email'][0]; 

感谢回答我问题的人。特别感谢塔奈克,他提出了一个解决方案,我可以用它作为汽油的起动器


当我使用Utilities.sleep5000时,每当有人提交google表单时,发票生成的PDF格式就会更新为最新信息。由于我创建的程序不是针对非常繁重的流程,这可能是它工作得非常好的原因。

我可以问一下您的情况吗?1.如何为用户2运行函数?2.如果问题是pdf的var pdf=UrlFetchApp.fetch,那么UrlFetchApp.fetch检索的电子表格如何更新?1。有一个触发器,它是在发送谷歌表单时设置的。这段代码是用电子表格脚本编写的。2.对不起,我不太明白这个问题的意思。然而,我可以说代码没有问题,因为我已经测试过很多次了。你所说的更新是什么意思?我不知道是否需要这些信息,但一旦提交google from,这些信息就会写入电子表格,并在另一张表格中将特定信息发送到发票。这会自动转换成PDF格式。当我在提交谷歌表单后直接检查发票时,电子表格和发票上的信息会更新,但我收到的是以前信息中的发票。谢谢回复。关于第二季度,在您的问题中,您说发票是在电子表格中创建的,包含收到的最新信息。因此,我认为您可以使用提交的值更新电子表格。所以我问了更新的情况。顺便说一下,你还说我已经最小化了代码。。关于这一点,如果在提交表单时更新并导出电子表格,那么将SpreadsheetApp.flush放在var pdf=UrlFetchApp.fetch之前如何?但是,不幸的是,我不确定这是否是直接的解决办法。对不起,我的英语不好。我的意思是,提交表单时,电子表格会更新并导出。我将试用SpreadsheetApp.flush,看看效果如何。如果它仍然不能解决问题,我将发表评论。谢谢你的时间。谢谢你的评论。由于Utilities.sleep5000与当前项目完美匹配,因此我将其用作快速测量。不过,我会继续研究以创建更好的代码,您的评论肯定会对我有所帮助。谢谢您的合作。