【发布时间】:2019-10-21 18:20:33
【问题描述】:
我有一个正在使用的 Google 表单和表格。当用户提交表单时,我在运行的工作表的 OnFormSubmit 中有代码。使用他们提交的 ID,我可以在该表的第二个选项卡中查找数据并将其通过电子邮件发送给某人。
我想将我查找到的那些值添加到响应表中。这可能吗?
function onFormSubmit(e)
{
var myRange = e.range;
sendEmail(myRange);
}
function sendEmail(submitRange) {
// FETCH SPREADSHEET VALUES//
var values = submitRange.getValues();
var row = values[0];
//WRITE FOUND VALUES TO EMAIL
var svTimeStamp = row[0]; //A
var svProjectManager = row[4]; //Update manually //E
var svClient = row[5]; //Update manually //F
//PREP LOOKUP VALUE SHEET
var mySpreadSheetFile = SpreadsheetApp.openById('--SheetId---');
var myLookupsTab = mySpreadSheetFile.getSheetByName("KMB Lookups");
//In Column 6 find value for Project Number
var projColumn = 6;
var projectNumbers = myLookupsTab.getRange(2, projColumn, myLookupsTab.getLastRow()).getValues(); //1st is header row
var rowIndex = projectNumbers.findIndex(svProjectID); //Row Index - 2
//Get value for column 7
var clntColumn = 7;
var clntRange = myLookupsTab.getRange(rowIndex+2, clntColumn);
var clntValue = clntRange.getValues();
//I don't think I can update 'Values' from 'submitRange, so I open the sheet
var myData = mySpreadSheetFile.getSheetByName("Form Responses 1");
var newestData = myData.getRange(2, 1, myData.getLastRow()).getValues(); //1st is header row
//FIND THE RECORD VIA MATCHING THE TIMESTAMP
var rowNewDataIndex = newestData.findIndex(svTimeStamp); //Row Index - 2
//UPDATE THE SHEET @ Rowindex, column 5
myData.getRange(rowNewDataIndex+2, 5).setValue(clntValue);
我希望单元格会使用查找值进行更新。 rowNewDataIndex 的值每次都是-14。我猜这行还没写完……
编辑:我认为问题是由于格式不匹配:
RANGE: Mon Oct 21 2019 15:24:00 GMT-0400 (EDT)
SHEET: Mon Oct 21 16:07:52 GMT-04:00 2019
这看起来可能有效:
var formattedDate = Utilities.formatDate(svTimeStamp, Session.getScriptTimeZone(), 'E MMM dd k:mm:ss zZ yyyy');
formattedDate = formattedDate.toString().replace("EDT","GMT");
formattedDate = formattedDate.toString().replace("-0500","-05:00");
formattedDate = formattedDate.toString().replace("-0400","-04:00");
然后我可以在现有电子表格中搜索该值。
【问题讨论】:
-
您实际上并不需要,因为您可以直接从 onFormSubmit 触发器的事件对象中获取它们。它是 e.values 或 e.namedValues。 ref 您可以将数据添加到工作表中,但我不建议这样做。它只会不理会它,并将多余的东西存储在另一张纸上。
-
我没有解释清楚。我已经从 e.values 中获取了价值。我需要将其与电子表格进行比较,以便添加其他值。它必须是同一张表,因为该表将被导入数据库,并且必须手动移动或运行将它们组合在一起的东西是我希望避免的额外步骤。
-
您好,您能提供一份您正在处理的文件的净化副本吗?
-
我怎样才能得到一份表格和表格的副本?
-
将发布经过清理的代码作为答案。希望没关系,编辑不要编辑我。 :)
标签: google-apps-script google-sheets-api