it-swarm.com.ru

Google через скрипт Google Apps?

Я пишу скрипт Google Apps на своем сайте Google и пытаюсь использовать данные, представленные на 2 разных вкладках электронной таблицы Google. Из того, что я понял из документации, я мог использовать все доступные методы в классе SpreadsheetApp в скрипте Sites, просто используя метод openById()

Во всяком случае, вот что я пытался сделать

function doGet(e) {

    var doc = SpreadsheetApp.openById(SPREADSHEET_ID_GOES_HERE).getActiveSheet();
    SpreadsheetApp.setActiveSheet(doc.getSheetId()[1]);

    //....
}

Я получаю ошибку 

Не удается найти метод setActiveSheet (. (Строка 4)

Я снимаю свою работу с этой ссылки: Хранение данных в таблицах Google а также в разделе Сервис пользовательского интерфейса, указанном в разделе Создание пользовательских интерфейсов.

Кто-нибудь видел, что я делаю неправильно в этих двух строках?

10
Mathitis2Software

setActiveSheet следует использовать только с электронной таблицей, отображаемой в пользовательском интерфейсе - листе электронной таблицы, который вы открыли в браузере.

С помощью SpreadsheetApp.openById вы открываете электронную таблицу для доступа к ее данным, но она не открывается в вашем браузере. У него нет пользовательского интерфейса.

Я нашел эти комментарии в https://developers.google.com/apps-script/class_spreadsheetapp?hl=es-ES#openById :

// The code below opens a spreadsheet using it's ID and gets the name for it.
// Note that the spreadsheet is NOT physically opened on the client side.
// It is opened on the server only (for modification by the script).
var ss = SpreadsheetApp.openById("abc1234567");

В некоторых примерах предполагается, что ваш скрипт работает в вашей электронной таблице. Это не ваш случай, потому что вы запускаете скрипт как сервис, который должен иметь собственный интерфейс пользователя.

19
Alejandro Silvestri

Я думаю, что @ megabyte1024 исправляет синтаксические ошибки, но в ответ на ваш комментарий @YoArgentina:

Вы случайно не знаете способ доступа к данным на разных вкладках через службу, не работающую внутри электронной таблицы?

Это как-то помогает?

var ss = SpreadsheetApp.openById(SPREADSHEET_ID_GOES_HERE);
var sheets = ss.getSheets();
// the variable sheets is an array of Sheet objects
var sheet1A1 = sheets[0].getRange('A1').getValue();
var sheet2A1 = sheets[1].getRange('A1').getValue();
5
AdamL

В этих двух строках есть как минимум одна проблема. Во-первых, параметры setActiveSheet method являются объектом класса Sheet, а метод getSheetId возвращает целочисленное значение. Кстати, этот метод (getSheetId) не документирован . Вторая проблема может возникнуть, если у SpreadsheetApp нет активной электронной таблицы. В этом случае есть «Пожалуйста, сначала выберите активную таблицу». ошибка. Используйте SpreadsheetApp.setActiveSpreadsheet метод, чтобы установить активную электронную таблицу.

1
megabyte1024

Вам нужно получить доступ к каждому листу отдельно. 

var ss = SpreadsheetApp.openById(SPREADSHEET_ID_GOES_HERE);
var sheet = ss.getSheets()[0]; // "access data on different tabs"
ss.setActiveSheet(sheet);
0
James Ferreira