if (continuationToken == null) {
var files = DriveApp.getFiles();
} else {
var files = DriveApp.continueFileIterator(continuationToken);
}
где continuationToken заранее получен и извлечен из внешнего хранилища.
if(files.hasNext()){
var continuationToken = files.getContinuationToken();
var values = SpreadSheets.getRange(i, c).getValue();
var values = SpreadSheets.getRange(i, c).getValues();
var lock = LockService.getPublicLock();
try {
lock.waitLock(30000);
return success();
} catch (err) {
Logger.log('Could not obtain lock after 30 seconds.');
return failure();
}
var lock = LockService.getPublicLock();
var success = lock.tryLock(30000);
if (!success) {
Logger.log('Could not obtain lock after 30 seconds.');
}
[Ljava.lang.Object;@556935f1
- это массив. Таблицы не поддерживают сложные типы. Попробуйте привести массив к строке.form['checkbox_name[]']
form['checkbox_name[]'].join(', ')
JSON.stringify(form['checkbox_name[]'])
JSON.stringify(form['checkbox_name[]'], null, ' ')
UrlFetchApp.fetch('https://www.pochta.ru/tracking#RG886664219CN').getContentText();
var file = DriveApp.createFile(fileName, content, 'text/html');
var downloadUrl = file.getDownloadUrl();
// Создаем окно на клиенте и запускаем
var a = window.document.createElement('a');
a.href = downloadUrl;
a.text = 'Download';
document.body.appendChild(a);
a.click();
title contains
. См. Search for Files. На данный момент, 2017-08-13, используется API v2, и для поиска в данном случае - это принципиально. Следующий код вернет то, что вы ожидаете:function getFileByName(name) {
var files = DriveApp.searchFiles(Utilities.formatString('title contains "%s" and trashed=false', name));
var result = undefined;
while(files.hasNext()){
var file = files.next();
if(file.getName() === name){
result = file;
break;
}
}
return result;
}
SpreadsheetApp.getActiveSpreadsheet();
В триггере OnFormSubmit
не может быть активной Таблицы, потому что никакой пользователь ее не открыл. А если даже и открыл, то он может не быть регистратором триггера или его инициатором./**
* В Таблице должен быть лист "Лог".
* Чтобы лист существовал всегда
* https://github.com/oshliaer/google-apps-script-snippets#get-a-sheet-by-name
**/
function handler(e) {
try {
sendFormByEmail(getNewEmailMessage(e));
} catch(err) {
e.source.getSheetByName('Лог').appendRow([new Date(), err.message, err.stack]);
}
}
e.source.getSheetByName()
. Это все, что надо./**
* Определение языка на основе ответа
**/
function getNewEmailMessage(e) {
var sheet = e.range.getSheet();
var lang = 'EN';
switch(sheet.getName()){
case 'RU':
return 'Ответ на русском';
break;
case 'EN':
return 'Ответ на нерусском';
break;
}
return 'Ответ на русском';
}
sendFormByEmail
согласно принимаемым параметрам.This method requires authorization with an OAuth 2.0 token that includes at least one of the scopes listed in the Authorization section; script projects that do not require authorization cannot be executed through this API.
POST https://script.googleapis.com/v1/scripts/{scriptId}:run
{scriptId}
- это уникальный номер самого скрипта, который находится в меню Файл - Свойства проекта - Ключ проектаfunction doPost(e) {
return ContentService.createTextOutput(JSON.stringify({status: 'ok'}))
.setMimeType(ContentService.MimeType.JSON);
}