我想知道是否有人可以帮助我..我写了这段代码,应该执行以下工作流程:
用户填写表格,表格回复记录在Excel表格中并进行各种计算,最终值附加到模板pdf中,此pdf通过电子邮件发送给用户。
脚本确实完成了所有这些,但只有当我手动点击“运行”时,我希望它在提交表单时执行,而我无法理解为什么它不会。
我会添加触发器的截图,但我不能,因为我还没有10个声誉;但我的触发器设置如下:
运行:onFormSubmit 事件:从电子表格,在表单提交
我会在下面粘贴我的代码,有没有人有任何想法,为什么它可能无法正常工作?任何帮助都将非常感激。
//Set out global variables
var docTemplate = ("1Ff3SfcXQyGeCe8-Y24l4EUMU7P9TsgREsAYO9W6RE2o");
var docName=("Calculations");
function onFormSubmit(e){
//Variables
var ss = SpreadsheetApp.getActiveSpreadsheet();
ss.setActiveSheet(ss.getSheetByName("Sheet3"));
var totalOutstandingPrincipalDebt = SpreadsheetApp.getActiveSheet().getRange("G25").getValue();
var totalOutstandingInterest = SpreadsheetApp.getActiveSheet().getRange("H25").getValue();
var totalOutstandingCompensation = SpreadsheetApp.getActiveSheet().getRange("I25").getValue();
var dailyInterestRate = SpreadsheetApp.getActiveSheet().getRange("J25").getValue();
var grandTotal = SpreadsheetApp.getActiveSheet().getRange("K25").getValue();
var userEmail = SpreadsheetApp.getActiveSheet().getRange("H24").getValue();
//Template Info
var copyId=DriveApp.getFileById(docTemplate).makeCopy(docName+' for '+userEmail).getId();
var copyDoc = DocumentApp.openById(copyId);
var copyBody = copyDoc.getActiveSection();
//Putting the data into the file
copyBody.insertParagraph(1,'Total Outstanding Principal Debt: £' + totalOutstandingPrincipalDebt);
copyBody.insertParagraph(2,'Total Outstanding Interest: £'+ totalOutstandingInterest );
copyBody.insertParagraph(3,'Total Outstanding Compensation: £'+ totalOutstandingCompensation);
copyBody.insertParagraph(4,'Grand Total: £' + grandTotal);
copyBody.insertParagraph(5,'Daily Interest Rate: £'+ dailyInterestRate);
copyDoc.saveAndClose();
//email pdf document as attachment
var pdf = DriveApp.getFileById(copyId).getAs("application/pdf");
var subject = "Calculations";
var body = "Thank you very much for using our online calculator. Please find your results attached.";
MailApp.sendEmail(userEmail, subject, body, {htmlBody: body, attachments: pdf});
//Deletes temporary Document
DriveApp.getFileById(copyId).setTrashed(true);
}
答案 0 :(得分:3)
看起来不是使用values attribute of the form submit event而是试图直接查看获取写入值的电子表格标签。可以这样想:您可以将此脚本附加到表单而不是电子表格,并使其仍然有效。在表单提交发生时,事件对象e
包含您需要的所有内容。
这是一个问题,因为您有硬连线的单元格地址,但表单将继续写更多行。这意味着您不会在累积时看到新行。
但大问题是您正在使用getActiveSpreadsheet()查看该标签。当用户提交表单回复时, 没有“活动电子表格”。形式是“活跃”的东西。因此,为了获取已提交的数据,您需要查看e.values
- 这将包含您当前在第9-14行中尝试访问的数据行。
顺便说一下,手动运行的原因是因为“活动电子表格”意味着什么。一旦您离开,该电子表格就不活跃。
修改强>
Zehrazjp20指出他们正在使用电子表格进行计算,而不仅仅是从表单提交事件中读取原始值。在这种情况下,最好的方法是替换:
var ss = SpreadsheetApp.getActiveSpreadsheet();`
与
var ssID = 'abcdefghijklmnop';
var ss = SpreadsheetApp.openById(ssID);
...当然,使用电子表格的真实身份证。