Добавление новой строки только с формулами с использованием Sheets API v4 - PullRequest
0 голосов
/ 12 октября 2018

Я довольно новичок в Sheets API и получаю много ошибок.

Я хотел бы добавить новую строку в лист на основе последней строки.Это включает в себя копирование формата и вставку формул с автозаполнением, но не со значениями.

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

  • извлек формулы из диапазона SUCCESS
  • , пытаясь использовать autoFillRequest, чтобы заполнить следующую строку 10столбцы (просто попытка).FAILED

Я оставил комментарий к getFormulas-like запросу и покажу вам, что у меня есть на данный момент с запросом autoFill.

Я получаю следующую ошибку:

Получены неверные данные JSON.Неизвестное имя «source_and_destination» в «request [0]»: поле не найдено.

function insertNewRow(){
  var ssId = "my_spreadsheet_id"
  /*var params = {
    ranges: ['Feuille1!21:21'],
    valueRenderOption: 'FORMULA'
  };
  var values = Sheets.Spreadsheets.Values.batchGet(ssId, params);
  var valueRange = Sheets.newValueRange();
  valueRange.majorDimension = "ROWS";
  valueRange.values = values.valueRanges[0].values;
  Logger.log(values.valueRanges[0].values[0].length);
  valueRange.range= 'Feuille1!22:22'
  //var req = Sheets.Spreadsheets.Values.update(valueRange , ssId, 'Feuille1!22:22', {
  //  valueInputOption: 'USER_ENTERED'
  //})*/
  var AFreq = Sheets.newAutoFillRequest();

  AFreq.range = Sheets.newGridRange();
  AFreq.range.startRowIndex = 1;
  AFreq.range.startColumnIndex = 0;
  AFreq.range.endRowIndex = 2;
  AFreq.range.endColumnIndex = 10;
  AFreq.range.sheetId = 0;

  AFreq.sourceAndDestination = Sheets.newSourceAndDestination();
  AFreq.sourceAndDestination.dimension = "ROWS";
  AFreq.sourceAndDestination.fillLength = 10;

  AFreq.sourceAndDestination.source = Sheets.newGridRange();
  AFreq.sourceAndDestination.source.startRowIndex = 0;
  AFreq.sourceAndDestination.source.startColumnIndex = 0;
  AFreq.sourceAndDestination.source.endColumnIndex = 10   
  AFreq.sourceAndDestination.source.endRowIndex = 1;
  AFreq.sourceAndDestination.source.sheetId = 0;

  var req = Sheets.newBatchUpdateSpreadsheetRequest();
  req.requests = [AFreq];
  Sheets.Spreadsheets.batchUpdate(req, ssId);
  }

Скажите, если я ошибаюсь, но я собираюсь разделить задачи на несколько запросов

  1. захватить формулы
  2. вставить новую строку
  3. копировать / вставлять предыдущий код в новую строку
  4. вставлять формулы

Собираюсь ли я в правильном направлении?Любая помощь с благодарностью.

1 Ответ

0 голосов
/ 12 октября 2018

Проблемы:

  • Request объект отсутствует в теле запроса.
  • AutoFillRequest имеет два поля области объединения, в то время как только одно допустимо.
  • Выбор пустого диапазона в GridRange.

Решение:

  • Исправление синтаксических ошибок, упомянутых выше
  • Использование простого тела запроса JSON для простой идентификации таких ошибок

Пример сценария:

function autoFill() {
  var ssId = 'my_spreadsheet_id';
  var req = {//request body    
    requests: [ //requests array    
      {//request Object
        autoFill: { //autoFill request
          //range OR sourceAndDestination;
          //equal to selecting Sheet1!A1:J10 and clicking autoFill from menu
          range: {//GridRange
            sheetId: 0,
            startRowIndex: 0,
            endRowIndex: 10, //end exclusive
            startColumnIndex: 0,
            endColumnIndex: 10,
          },
        },
      },
    ],
  };
  Sheets.Spreadsheets.batchUpdate(req, ssId);
}

Ссылки:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...