У меня есть Google Form и Google Sheet, предназначенные для сбора необходимой мне информации. В настоящее время у меня есть сценарий, который отправит мне и отправителя формы, электронное письмо с прикрепленным PDF-файлом, содержащее содержимое их представления формы.Создайте документ Doc (и PDF) данных строки при редактировании ячейки в строке листа
Я пытаюсь отредактировать этот скрипт и создать еще один, который отправит мне новую версию PDF после того, как я войду, и внести изменения в одну из ячеек, связанных с исходной отправкой формы (обновить статус проблемы , добавлять примечания, правильную грамматику и т. д.).
Это то, что у меня есть, я все еще очень новое в программировании и был бы признателен за любую помощь ...
(18 ноября @ 1425) Это работает! var last_column не разрешал столбцу после того, как отредактированная ячейка была определена. Когда я заменил last_column в данных var фактическим количеством столбцов, содержащих данные, он отлично работал! Спасибо всем, кто помог мне разобраться в этом, и немного поучиться на этом пути!
function onSheetEdit(e) {
var source = SpreadsheetApp.getActiveSpreadsheet();
var source_sheet = source.getSheetByName("Form Responses 1");
var range = source_sheet.getDataRange();
var ActiveRow = source_sheet.getActiveRange().getRow();
var data = source_sheet.getRange(ActiveRow,1,1,4).getValues();
var columnA = data[0][0];
var columnB = data[0][1];
var columnC = data[0][2];
var columnD = data[0][3];
(18 ноября 0800 @) Другой друг предложил изменить начало этого ... В письме также посылает, и теперь я получаю «1» «1» «/» и «1» в моем четыре документа заполнители ...
функция onSheetEdit (е) {
var source_sheet = e.source.getActiveSheet();
if (source_sheet.getName() !== "Form Responses 1") return; //exit the script if edits are done on other sheets
var data = source_sheet.getRange(e.range.rowStart, 1, 1, source_sheet.getLastColumn())//(StartRow,StartColumn,NumberofRowstoGet,NumberofColumnstoGet)
.getValues()[0];
Logger.log(data);
var columnA = data[0][0];
var columnB = data[0][1];
var columnC = data[0][2];
var columnD = data[0][3];
(17 Ноябрю @ 1845) у меня был друг помочь мне с работы, и это, насколько мы получили ... электронная почта отправляется сейчас, но заполнители не заполняют данные правильно в приложении PDF-файла. Оказывается, что только данные, заселение это данные из строки 1, и из этих данных, только ячейка, которая была отредактирована, и данных в ячейках справа от нее ...
function onSheetEdit(e) {
var source = SpreadsheetApp.getActiveSpreadsheet();
var source_sheet = source.getSheetByName("Form Responses 1");
var range = source_sheet.getDataRange();
var last_column = source_sheet.getActiveRange().getColumn();
var ActiveRow = source_sheet.getActiveRange().getRow();
var data = source_sheet.getRange(ActiveRow,1,1,last_column).getValues();
var columnA = data[0][0];
var columnB = data[0][1];
var columnC = data[0][2];
var columnD = data[0][3];
(16 NOV @ 1700) Я отредактировал сценарий к этому, но все еще не создал электронные письма. Я получаю эту ошибку, отправленную мне по электронной почте, когда скрипт терпит неудачу: «Ссылка на ячейку вне диапазона (строка 13, файл« Копия подтверждения подтверждения формы »)». Строка 13 - строка var.
function onSheetEdit() {
var source = SpreadsheetApp.getActiveSpreadsheet();
var source_sheet = source.getActiveSheet()
var row = source_sheet.getActiveCell().getRow();
var last_column = source_sheet.getLastColumn();
var data = source_sheet.getRange(row,1,1,last_column).getValues();
var columnA = data[0][0];
var columnB = data[0][1];
var columnC = data[0][2];
var columnD = data[0][3];
(16 ноябрь 1330 @) Я попытался это, но вместо этого до сих пор нет электронной почты генерируется ...
function onSheetEdit() {
var source = SpreadsheetApp.getActiveSpreadsheet();
var source_sheet = source.getActiveSheet()
var row = source_sheet.getActiveCell().getRow();
var last_column = source_sheet.getLastColumn();
var data = source_sheet.getRange(row,1,1,last_column);
var columnA = data.values[0];
var columnB = data.values[1];
var columnC = data.values[2];
var columnD = data.values[3];
Оригинальный сценарий ...
function onSheetEdit(e) {
var sheet = SpreadsheetApp.getActiveSpreadsheet();
var rows = sheet.getActiveCell().getRow();
var columnA = e.values[0];
var columnB = e.values[1];
var columnC = e.values[2];
var columnD = e.values[3];
var docTemplate = "1WyWeCLQQ3en1EbKjOLcWxlOLc0fHHDpZrB9yfXZ7nv8";
var docName = "Test form script";
var carbonCopyEmail = "[email protected]";
var submitterEmail = columnB;
var dataName = columnC;
var submitDate = columnA;
var attachmentName = docName + ' for data ' + dataName
var submitterEmailPlaceholder = 'keyUsername';
var submitDatePlaceholder = 'keyTimestamp';
var templatePlaceholder1 = 'keyQuestion1';
var templatePlaceholder2 = 'keyQuestion2';
var submitterSubject = "Test Script Confirmation Email for data " + dataName;
var submitterBody = "Attached is a PDF confirmation sheet with the details of your submission of data: " + dataName + " submitted on " + submitDate;
var carbonCopySubject = "Test Script Submission Notification Email for data " + dataName;
var carbonCopyBody = "Attached is a PDF confirmation sheet with the details of " + submitterEmail + "'s submission of data: " + dataName + " on " + submitDate;
//Gets document template defined by the docID above, copys it as a new temp doc, and saves the Doc’s id
var copyId = DocsList.getFileById(docTemplate)
.makeCopy(attachmentName)
.getId();
//Open the temporary document
var copyDoc = DocumentApp.openById(copyId);
//Get the document’s body section
var copyBody = copyDoc.getActiveSection();
//POSSIBLE MODIFICATION TO ADD LINES OF CODE
//Replace place holder keys with the spreadsheet values in the google doc template
//This section of the script looks for instances where the key appears in the Google Doc and replaces the instance
//with the defined variable
//For instance, whenever "keyUserName" (defined above as submitterEmailPlaceholder) appears in the Google Doc,
//the value from the spreadsheet in columnB replaces "keyUserName"
copyBody.replaceText(submitDatePlaceholder, columnA);
copyBody.replaceText(submitterEmailPlaceholder, columnB);
copyBody.replaceText(templatePlaceholder1, columnC);
copyBody.replaceText(templatePlaceholder2, columnD);
//Save and close the temporary document
copyDoc.saveAndClose();
//Convert temporary document to PDF
var pdf = DocsList.getFileById(copyId).getAs("application/pdf");
//Attaches the PDF and sends the email to the form submitter
MailApp.sendEmail(submitterEmail, submitterSubject, submitterBody, {htmlBody: submitterBody, attachments: pdf});
//Attaches the PDF and sends the email to the recipients in copyEmail above
MailApp.sendEmail(carbonCopyEmail, carbonCopySubject, carbonCopyBody, {htmlBody: carbonCopyBody, attachments: pdf});
//Deletes the temporary file
DocsList.getFileById(copyId).setTrashed(true);
}
Что не работает в этом коде? На первый взгляд кажется, что все в порядке ... можете ли вы указать на свою проблему? –
Серж, я получаю эту ошибку: TypeError: Невозможно прочитать свойства «значения» из undefined.Он выделяет var columnA. Я точно знаю, что все под e.values работает, потому что оно работает в моем скрипте для создания документов при отправке формы. Часть, в которой мне нужна помощь, - это выяснить, как определить все данные в строке, которая изменяется, когда ячейка изменена. –
Нормальный ... обратитесь к этому сообщению, чтобы узнать, как вы можете проверить код в редакторе скриптов: http://stackoverflow.com/questions/16089041/how-can-i-test-a-trigger-function-in -gas –