Не могу обновить массив значений для одного диапазона в Google листе - PullRequest
0 голосов
/ 07 апреля 2019

Я успешно использовал запрос "электронные таблицы # получить" API Google Sheets для указанного диапазона и произвел некоторые вычисления для каждого элемента в массиве, сохранив их в новом массиве.

Теперь мне нужно обновить другой диапазон в Google Sheet с помощью элементов массива, которые я вычислил.

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

"Запрошенная запись в пределах диапазона [BILLING! D2: D], но попытка записи в столбец [E]"

, где [BILLING! D2:D] - диапазон, который я хотел обновить.

Вот мой код

Чтение данных

  const sheets = google.sheets({version: 'v4', auth});
  let ranges = ['BILLING!A2:A']
  sheets.spreadsheets.values.get({
      spreadsheetId: '1F1ed24fgZIQChueq1AGrKIYRXKrX-vK3RAIYKd5lVrE',
      range: ranges,
  }, (err, res) => {
      let sma_array = [];
      async(res.data.values, (value, callback) => {
          let id = value[0];
          let url = 'https://www.quandl.com/api/v3/datasets/BSE/BOM' + id + '?limit=57&api_key=' + MY_API_KEY;
          reqs.requestFun(url, id).then((result, err) => {
              sma_array.push(result)
              console.log(id,result)
              setTimeout(function () { callback(); }, 500);
          })            
      }, function (err) {
          writing(sma_array)
      });
  })

Входной массив из A2: A: -

[ [ '532424' ],
  [ '500003' ],
  [ '524634' ],
  [ '531978' ],
  [ '500493' ],
  [ '532321' ],
  [ '530307' ],
  [ '532622' ],
  [ '500300' ],
  [ '530001' ],
  [ '532457' ],
  [ '524494' ],
  [ '524731' ],
  [ '500233' ],
  [ '532714' ],
  [ '524500' ],
  [ '539229' ],
  [ '524084' ],
  [ '538019' ],
  [ '533179' ],
  [ '523539' ],
  [ '532805' ],
  [ '500367' ],
  [ '531431' ],
  [ '503811' ],
  [ '532343' ],
  [ '504212' ],
  [ '507880' ],
  [ '532953' ],
  [ '540743' ] ]

Запись данных

let writing = function (sma_array) {
    console.log(sma_array)
    let values = [
        sma_array
    ]
    const resource = {
        values: values
    }
    let ranges = ['BILLING!D2:D']
    sheets.spreadsheets.values.update({
        spreadsheetId: '1F1ed24fgZIQChueq1AGrKIYRXKrX-vK3RAIYKd5lVrE',
        range: ranges,
        valueInputOption: 'RAW',
        resource: resource,
    }, (err, result) => {
        if (err) {
            // Handle error
            console.log(err);
        } else {
            console.log('%d cells updated.', result.updatedCells);
        }
    });
}

Массив, который должен получить обновление для D2: D: -

[ [ 702.8052631578946,
       198.67719298245612,
       105.9236842105263,
       1137.5780701754388,
       496.70263157894743,
       329.87456140350884,
       78.04912280701757,
       115.24473684210525,
       784.7464912280702,
       490.9464912280701,
       56.51228070175439,
       841.3201754385965,
       498.77192982456154,
       554.2035087719298,
       268.8666666666667,
       199.00438596491227,
       37.27543859649123,
       2592.591228070176,
       27.73684210526315,
       626.8912280701755,
       205.12368421052628,
       85.49035087719298,
       40.75175438596491,
       391.38947368421043,
       369.10789473684207,
       488.36315789473656,
       227.23596491228068,
       458.780701754386,
       206.2780701754385,
       208.4875856548958 ] ]

Error

 errors:
   [ { message:
        'Requested writing within range [BILLING!D2:D3], but tried writing to column [E]',
       domain: 'global',
       reason: 'badRequest' } ] }

1 Ответ

0 голосов
/ 17 апреля 2019

Проблема решена путем изменения majorDimension для вывода в столбец или путем изменения выходного массива, например, как major size = ROW.Раньше мой массив был похож на массив = [1,2,3,4] и теперь изменился на массив = [[1], [2], [3], [3]].

Для вывода, еслиданные электронной таблицы: A1 = 1, B1 = 2, A2 = 3, B2 = 4, затем запрашивающий диапазон = A1: B2, majorDimension = ROWS вернет [[1,2], [3,4]], тогда как запрашивающийrange = A1: B2, majorDimension = COLUMNS вернет [[1,3], [2,4]].

Для ввода с диапазоном = A1: B2, majorDimension = ROWS затем [[1,2], [3,4]] установит A1 = 1, B1 = 2, A2 = 3, B2 = 4.При диапазоне = A1: B2, majorDimension = COLUMNS, тогда [[1,2], [3,4]] установит A1 = 1, B1 = 3, A2 = 2, B2 = 4.

...