HTTP Get в Google Spreadsheet, "e undefined"
Я пытаюсь использовать HTTP Get
в таблице Google, чтобы иметь возможность создать URL
к конкретной ячейке в листе.
Я искал, как это сделать, и я пытался использовать этот способ (GET
часть), например.
Вот код, который я собрал:
function doGet(e){
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("Kunder");
var row = e.parameter["row"];
var col = e.parameter["col"];
var ss = SpreadsheetApp.getActiveSpreadsheet();
var range = sheet.getRange(row, col);
SpreadsheetApp.setActiveSheet(sheet);
SpreadsheetApp.setActiveRange(range);
}
И это пример URL
:
https://docs.google.com/spreadsheets/d/[spreadsheet ID]/edit?row=5&col=1
Когда я запускаю скрипт, я получаю эту ошибку:
TypeError: Cannot read property "parameter" from undefined.
Я что-то не так делаю? Или это не возможно?
Заранее спасибо,
Oskar
РЕДАКТИРОВАТЬ
Это мой текущий код:
function doGet(e){
var ss = SpreadsheetApp.openById("[id]");
SpreadsheetApp.setActiveSpreadsheet(ss);
var sheet = ss.getSheetByName("Kunder");
var row = Number(e.parameter.row);
var col = Number(e.parameter.col);
var range = sheet.getRange(row, col);
SpreadsheetApp.setActiveSheet(sheet);
SpreadsheetApp.setActiveRange(range);
}
Код выполняется, но заканчивается
The script completed but did not return anything.
Я хочу открыть электронную таблицу, а затем установить активный диапазон из GET
параметры.
1 ответ
Показанный вами URL недействителен.
Чтобы использовать этот тип сценария, вы должны развернуть сценарий как веб-приложение и использовать полученный.exec url с параметрами.
В конце это будет выглядеть так:
https://script.google.com/macros/s/AKfycbygwUwXXXXXXXXxJcKpBvsbflmnZ0Uqfu-JISWTZNvar32s3v_hl/exec?row=5&col=1
РЕДАКТИРОВАТЬ: не будет активного листа в этом контексте, используйте openById
или же openByUrl
вместо. Кроме того, значения, которые вы получаете для строки и столбца, являются строками, вы должны сделать их целыми числами и использовать обычный sheet.getRange(row,col)
выбрать диапазон.
EDIT2:
этот URL:
https://script.google.com/macros/s/AKfycbwZbGW6E483BUplvLjCjNCXKjjiRorqzR9lruSydogeuU-YIvID/exec?row=1&col=1
и этот код:
function doGet(e){
var ss = SpreadsheetApp.openById("1sbJXuEpL_88-u-Bm4QOCAM3SVddFwZKI0c1kxeRpcos");
var sheet = ss.getSheetByName("Sheet1");
var row = Number(e.parameter.row);
var col = Number(e.parameter.col);
var range = sheet.getRange(row, col);
sheet.getRange(row, col).setValue('test ok')
}
пишет в этом листе: см. ячейку А1 или проверить в другой строке и столбце.
Вы действительно получите сообщение, что ничего не было возвращено, и это действительно так! мы ничего не возвращаем в этом коде, это всего лишь демонстрация;-)
РЕДАКТИРОВАТЬ 3: как уже упоминалось в комментариях, чтобы получить что-то, возвращаемое этой функцией, вы должны что-то перезапустить...
Вот пример:
function doGet(e){
var ss = SpreadsheetApp.openById("1sbJXuEpL_88-u-Bm4QOCAM3SVddFwZKI0c1kxeRpcos");
var sheet = ss.getSheetByName("Sheet1");
var row = Number(e.parameter.row);
var col = Number(e.parameter.col);
var range = sheet.getRange(row, col);
var value = sheet.getRange(row, col).getValue();
sheet.getRange(row, col).setValue('test ok');
var stringValue = value==''?'empty':value;
Logger.log(stringValue);
return ContentService.createTextOutput(stringValue).setMimeType(ContentService.MimeType.TEXT);
}