У меня есть форма и лист Google, с которыми я работаю. Когда пользователь отправляет форму, у меня есть код в OnFormSubmit листа, который работает. Используя предоставленный ими идентификатор, я могу найти данные на второй вкладке этого листа и отправить их кому-нибудь по электронной почте.
Я хотел бы добавить те значения, которые я посмотрел, в лист ответов. Возможно ли это?
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");
Затем я могу найти в существующей электронной таблице это значение.