Пакетное обновление Sheets API определенного листа, собственный Javascript

#javascript #google-sheets-api

#javascript #google-sheets-api

Вопрос:

Как мне указать конкретный рабочий лист в этом Google Sheet (sheetId), в который я хочу вставить строки? С помощью приведенного ниже кода он вставляет строки в первый рабочий лист. Я знаю, как указать рабочий лист с помощью вызова append API ( spreadsheets/' sheetId '/values/' range ':append ), но тот же синтаксис здесь не работает для вызова batchUpdate (https://developers.google.com/sheets/api/samples/rowcolumn#insert_an_empty_row_or_column ).

Чего мне не хватает?

 const resource = {
  requests: [
    {
      insertDimension: {
        range: {
          dimension: 'ROWS',
          startIndex: 1,
          endIndex: 5
        }
      }
    }
  ]
};

var url = 'https://sheets.googleapis.com/v4/spreadsheets/'   sheetId   ':batchUpdate';
var xhr = new XMLHttpRequest();
xhr.open("POST",url,false);
xhr.setRequestHeader("Authorization", "Bearer "   token);
xhr.send(JSON.stringify(resource));
  

Ответ №1:

Я обнаружил, что мне нужно включить поле «sheetId» внутри объекта «range» в моем запросе. Этот идентификатор листа НЕ совпадает с идентификатором электронной таблицы (о котором я изначально думал). Это также не имя отдельного рабочего листа, а фактически номер, присвоенный Google, который соотносится с отдельным рабочим листом.

Я могу узнать этот номер, только вызвав spreadsheets.get , который является следующим URL: https://sheets.googleapis.com/v4/spreadsheets/' spreadsheetId '?fields=sheets.properties .

Ссылка:https://developers.google.com/sheets/api/samples/sheet#determine_sheet_id_and_other_properties

Я включил параметр «поля» в приведенный выше URL-адрес, чтобы получить только свойства листа (который включает идентификаторы листов, имена и т.д.), А не все данные ячейки. Я могу использовать объект return, чтобы просмотреть все листы в электронной таблице и их идентификаторы листов, заголовки и другую информацию. Я могу использовать этот идентификатор листа для выполнения вызова, который я изначально хотел выполнить с помощью batchUpdate.