Хорошие разработчики, мой английский не очень хорош, пожалуйста, потерпите меня.Я студент, и я впервые вступил в контакт с Google Script на листе.У меня есть ситуация:
Шаг 1 Пользователь заполняет форму Google
Шаг 2 Форма Google для передачи данных в сценарий
Шаг 3 Форма Google также отправляет данные вGoogle Sheet
Step.4 Скрипт будет использовать данные формы для создания документа и копию документа из шаблона doc
Step.5 Значение столбца в Google Sheet можно связать с документом
Прочитав много статей в Интернете, я думаю, что это очень хорошо, я попробовал следующий код, он «иногда удался»:
function myFunction(e) {
const folderID = '##';
const templateFile = '##';
const sheetPath = '##';
const nameCol = 4;
const arr = ['timestamp', 'email', 'Company Name', 'Contact Man'];
const ss = SpreadsheetApp.openById(sheetPath);
const sheet = ss.getSheets()[0];
Logger.log('nesl_timestamp:' + e.namedValues);
const timestamp = e.namedValues['timestamp']; //0
const email = e.namedValues['email']; //1
const ein = e.namedValues['EIN / Uniform Number']; //2
const name = e.namedValues['Company Name']; //3
const man = e.namedValues['Contact Man']; //4
const tel = e.namedValues['TEL']; //5
const add = e.namedValues['adress']; //6
const title = e.namedValues['Title']; //7
const job = e.namedValues['Job content']; //8
const time = e.namedValues['Working hours']; //9
const type = e.namedValues['Salary or Wage ']; //10
const salary = e.namedValues['Salary']; //11
const dep1 = e.namedValues['Department [1]']; //12
const dep2 = e.namedValues['Department [2]']; //13
const other = e.namedValues['Other Inf.']; //15
const method = e.namedValues['Application Method']; //16
const data = e.namedValues['Prepare data']; //17
var userfile = e.namedValues['userfile']; //18
const exp = e.namedValues['exp']; //19
const people = e.namedValues['people ']; //20
const addno = e.namedValues['addno']; //21
const otherThing = e.namedValues['otherThing ']; //22
var arr2 = [timestamp, email, name, man];
//todo:set userfile path
if (userfile.length != 0 && userfile.indexOf(',') > -1) userfile = userfile.split(',')[0];
Logger.log('nesl_userfile:' + userfile);
//todo: copy template.doc to doc
const copy = DriveApp.getFileById(templateFile).makeCopy(name + ',' + timestamp, DriveApp.getFolderById(folderID));
const docID = copy.getId();
Logger.log('nesl_docID:' + docID);
const doc = DocumentApp.openById(docID);
var body = doc.getBody();
body.replaceText('{{timestamp}}', timestamp);
body.replaceText('{{ein}}', ein);
body.replaceText('{{name}}', name);
body.replaceText('{{man}}', man);
body.replaceText('{{tel}}', tel);
body.replaceText('{{add}}', add);
body.replaceText('{{title}}', title);
body.replaceText('{{job}}', job);
body.replaceText('{{time}}', time);
body.replaceText('{{type}}', type);
body.replaceText('{{salary}}', salary);
body.replaceText('{{dep1}}', dep1);
body.replaceText('{{dep2}}', dep2);
body.replaceText('{{other}}', other);
body.replaceText('{{method}}', method);
body.replaceText('{{data}}', data);
body.replaceText('{{exp}}', exp);
body.replaceText('{{people}}', people);
body.replaceText('{{addno}}', addno);
body.replaceText('{{otherThing}}', otherThing);
body.replaceText('{{userfile}}', userfile);
doc.saveAndClose();
//todo: get doc id insert into sheet
//I think this may have to be written after openById(), otherwise he will copy the file twice, but I find that it will copy the file twice when I first add the data. I am not sure about myself now.
sheet.getRange(sheet.getLastRow(), sheet.getLastColumn()).setValue(docID);
Logger.log('nesl_update:' + sheet.getLastRow() + ',' + sheet.getLastColumn());
//todo: set name column link
//I think this may have to be written after openById(), otherwise he will copy the file twice, but I find that it will copy the file twice when I first add the data. I am not sure about myself now.
var nameColumnSheet = sheet.getRange(sheet.getLastRow(), nameCol);
sheet.getRange(sheet.getLastRow(), nameCol).setValue(
'=HYPERLINK("https://docs.google.com/document/d/' + docID + '","' + nameColumnSheet.getValue() + '");'
);
//todo:Send the link to the user in the email
var html =
'<body>' +
'<h2> thank: ' + man + ' </h2><br/>' +
'<p> link:' + 'https://docs.google.com/document/d/' + docID + '<br/> and http://dce.ntub.edu.tw/p/404-1029-67423.php?Lang=zh-tw </p>' +
'</body>';
MailApp.sendEmail(
email,
'nnboss@ntub.edu.tw',
'ntub',
{ htmlBody: html }
);
}
В нем часто встречаются следующие ошибки:
- Добавлять одни и те же данные на лист много раз.
- Копировать несколько шаблонов документов, документ {{item}} заменяется на «пустой», становится пустым документ
- Но пустой документ сохранит отметку времени
- Ссылка на листе будет связана с пустым документом
- Однако ссылка в электронном письме связана с правильным документом и не отправляетсянесколько раз.
- связанные исчезают
- другие ошибки
Эти ошибки обычно возникают, когда я открываю рабочий лист или выполняю стресс-тест во время заполнения формы.Я могу только утешить себя, может, мне не стоит открывать простыни, но это очень странно.Его ошибка все равно будет отображаться.
По моим наблюдениям, это выглядит так, как будто myFunction () вызывается несколько раз, и во второй раз нет 'e', но должно появиться 'ReferenceError:' e 'неопределено ', и у него нет причин для этого.
Эта проблема очень сложная, мой английский очень плохой, я даже не знаю, как получить ключевые слова.
Пожалуйста, помогите мне.
шаблон документа
правильный документ
пустой документ
Есликто-нибудь должен попробовать:
папка: https://drive.google.com/open?id=1lv7euKTQcS5Ooa7UUErRc3eBJNZz01jx
форма: https://docs.google.com/forms/d/16yzqi0ClVUBokXmehDAzY0otY7TdN8WTiBY2zHNXD7g
лист: https://docs.google.com/spreadsheets/d/1oAvIpx02f2eSqZl7jHpNsh2AAw31H8RGNw50W38lmDk
шаблон документа: https://docs.google.com/document/d/11QGRwplzVNtjcYa_n64HbQ6OwCiJxsBkWergxAvd0Ho
код скрипта: https://docs.google.com/document/d/1sKFzgz6PKzuIXL3qP2E1CntFRvooxI0tY6K4D1Ksj6c