Как обновить данные ячейки без очистки предыдущего значения в NodeJS (google-sheet-api) - PullRequest
1 голос
/ 30 мая 2019

Я работаю над NodeJS, Google Sheets API. Я пытаюсь добавить несколько журналов в ячейку на листе, журналы создаются каждый раз, когда мой код выполняет функцию (создание журналов).Каждый раз, когда код обновляет ячейку, мои предыдущие журналы стираются.Как я могу избавиться от перезаписи в ячейке?Я хочу, чтобы мои новые журналы сохранялись со старыми

. Я пытался изменить sheets.spreadsheets.values.batchUpdate({}) на sheets.spreadsheets.batchUpdate({}), но не могу найти соответствующий параметр там

async regressionMapBatchUpdateSheet(auth, cellsRange = "", ...restValues) {
        return new Promise((resolve, reject) => {
            const sheets = google.sheets({ version: 'v4', auth });
            sheets.spreadsheets.values.batchUpdate({
                spreadsheetId: 'spreadsheetId',
                requestBody: {
                    data: [
                        {
                            range: cellsRange,
                            values: [
                                restValues
                            ]
                        }
                    ],
                    valueInputOption: "USER_ENTERED",
                    includeValuesInResponse: true
                }
            }, (err, response) => {
                if (err) {
                    console.log(err);
                    return reject(err);
                } else {
                    console.log(`The sheet were updated, cells were updated: "${response.data.responses.map(res => res.updatedData.values)}"`);
                    resolve(response);
                }
            })
        });

значения: [restValues]= мои введенные журналы

Я хочу хранить свои журналы в ячейке.Было бы здорово, если бы логи запускались с новой строки каждый раз.

1 Ответ

0 голосов
/ 31 мая 2019
  • Вы хотите добавить значение в новую строку, используя API Sheets с Node.js.

Если мое понимание верно, как насчет этой модификации?

Модификацияточка:

  • Я думаю, что использование метода values.append подходит для вашей ситуации.

Модифицированный скрипт:

Пожалуйста, измените следующим образом.

From:

sheets.spreadsheets.values.batchUpdate({
    spreadsheetId: 'spreadsheetid',
    requestBody: {
            data: [
                {
                    range: dateCell,
                    values: [
                        [date]
                    ]
                },
                {
                    range: resultCell,
                    values: [
                        [result]
                    ]
                },
                {
                    range: commentCell,
                    values: [
                        [comment]
                    ]
                }
            ],
            valueInputOption: "RAW",
            includeValuesInResponse: true
        }
}, (err, response) => {

To:

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

sheets.spreadsheets.values.append(
  {
    spreadsheetId: 'spreadsheetid',
    range: "Sheet1!A:A", // This is a sample range.
    valueInputOption: "RAW",
    resource: { values: [["date", "result", "comment"]] } // This is a sample value.
  }, (err, response) => {

Примечание:

  • Исходя из вашего вопроса, я могу подтвердить, что вы уже смогли использовать Sheets API.
  • В этом случае значение может быть установлено как { values: [["date", "result", "comment"]] }.

Ссылки:

Если я неправильно понял ваш вопрос, и это был не тот результат, который вы хотите, я извиняюсь.

Редактировать:

  • Вы хотите добавить значениев те же ячейки без перезаписи.Например, ячейки A1:B1 имеют sample1 и sample2.Когда значения sample3 и sample4 добавляются к A1 и B1, соответственно, ячейки становятся sample1sample3 и sample2sample4.

Из вашего комментария ответа ямог бы понять, как это.К сожалению, в данной ситуации на текущем этапе это невозможно сделать одним вызовом API.Поэтому требуется выполнить следующий поток.

  1. Получить значения из A1:B1.
  2. Установить значения в A1:B1 путем обновления значений.

Для этого, например, как насчет использования метода spreadsheets.values.get и spreadsheets.values.update?

Модифицированный скрипт:

От:

sheets.spreadsheets.values.batchUpdate({
    spreadsheetId: 'spreadsheetid',
    requestBody: {
            data: [
                {
                    range: dateCell,
                    values: [
                        [date]
                    ]
                },
                {
                    range: resultCell,
                    values: [
                        [result]
                    ]
                },
                {
                    range: commentCell,
                    values: [
                        [comment]
                    ]
                }
            ],
            valueInputOption: "RAW",
            includeValuesInResponse: true
        }
}, (err, response) => {

To:

В этом случае ячейки Sheet1!A1:B1 обновляются путем добавления дополнительных значений к существующим значениям.Например, когда ячейки Sheet1!A1:B1 имеют sample1 и sample2, при запуске этого сценария ячейки обновляются до sample1sample3 и sample2sample4.

const spreadsheetId = "###";
const range = "Sheet1!A1:B1";
const additionalValue = [["sample3", "sample4"]];
sheets.spreadsheets.values.get(
  {
    spreadsheetId: spreadsheetId,
    range: range
  },
  (err1, result1) => {
    if (err1) {
      console.log(err1.errors);
      return;
    }
    const newValue = result1.data.values.map((row, i) =>
      row.map((col, j) => col + additionalValue[i][j])
    );
    sheets.spreadsheets.values.update(
      {
        spreadsheetId: spreadsheetId,
        range: range,
        valueInputOption: "USER_ENTERED",
        resource: { values: newValue }
      },
      (err2, result2) => {
        if (err2) {
          console.log(err2.errors);
          return;
        }
        console.log(result2.data);
      }
    );
  }
);

Ссылки:

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