这是我通过Google Apps Script创建的流程。
- 有人用谷歌表格写下他们的信息
- 信息存储在电子表格中
- 发票是在电子表格中创建的,其中包含收到的最新信息
- 发票自动转换为PDF格式
- 最新的发票附加到自动发送电子邮件
- 该人在提交谷歌表单后立即收到一封自动电子邮件 ,其中包含发票
问题是,当有人提交谷歌表单时,他们会收到一张发票,但他们收到的是来自之前信息的发票。然后重复此操作。当有人提交时,发票内的信息来自之前的人。
我是Google Script的初学者,所以我不知道为什么会发生这种情况。
这是我用来发送自动电子邮件的代码。我已经最小化了代码。
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 + "nn";
if ( item === name ) {
body = value+" 様nn"+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.
感谢回答我问题的人。特别感谢 Tanaike,他提出了一种解决方法,我可以将其用作 GAS 的启动器。
正如我Utilities.sleep(5000)
使用的那样,每当有人提交谷歌表单时,生成的发票(PDF格式(都会更新为最新信息。由于我创建的程序不是针对非常繁重的进程,这可能是它运行良好的原因。
如果 SpreasheetApp.flush(( 似乎不起作用,那么您当然应该转到 onFormSubmit - 可安装触发器。
触发器 - 表单提交
通过这种方式,您可以处理表单中的确切值,并使用您现在使用的相同函数。您可以使用此功能从表单提交中获取值,而不是获取最后一行值。
var name = e.namedValues['Name'][0]; var email = e.namedValues['Email'][0];