Вставка даты (гггг-ММ-дд ЧЧ: мм: сс) в таблицу Google с использованием Javascript добавляет апостроф - PullRequest
1 голос
/ 19 сентября 2019

Я использую библиотеку googleapis с Node.js для добавления новых строк в таблицу Google.Это пример данных, которые я хочу добавить:

[ 9999, 1, 0, 0, 1, 0, '2019-09-19 14:16:10' ]

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

'2019-09-19 14: 16: 10

Я использую скрипт:

const { google } = require('googleapis');
const keys = require('../keys.json');

class GoogleSpreadsheet {

  constructor() {
    this.client = new google.auth.JWT(
      keys.client_email, 
      null, 
      keys.private_key, 
      ['https://www.googleapis.com/auth/spreadsheets']
    );
  }

  insertRow(data, sheet, method) {
    try {
      this.client.authorize(async (error) => {
        if (error) throw error;

        const gsapi = google.sheets({ version: 'v4', auth: this.client });

        if (method === 'append') {
          const opts = this.buildAppendOptions(sheet, data);
          await gsapi.spreadsheets.values.append(opts);
        }

        if (method === 'update') {
          const opts = this.buildUpdateOptions(sheet, data);
          await gsapi.spreadsheets.values.update(opts);
        }

      });
    } catch (error) {
      console.error('Could not insert raws into google spreadsheet')
    }
  }

  buildAppendOptions(sheet, data) {
    return {
      spreadsheetId: process.env.GOOGLE_SPREADSHEET_ID,
      range: sheet,
      valueInputOption: 'RAW',
      insertDataOption: 'INSERT_ROWS',
      resource: {
        values: data
      }
    }
  }

  buildUpdateOptions(sheet, data) {
    return {
      spreadsheetId: process.env.GOOGLE_SPREADSHEET_ID,
      range: sheet,
      valueInputOption: 'RAW',
      resource: {
        values: data
      }
    }
  }

}

module.exports = GoogleSpreadsheet;

Я вызываю кодкак это:

const date = new Date().toISOString().replace(/([^T]+)T([^\.]+).*/g, '$1 $2') // Gives format (yyyy-MM-dd HH:mm:ss)
const statistics = [[ 9999, 1, 0, 0, 1, 0, date ]];
const gs = new GoogleSpreadSheet();
gs.insertRow(statistics, process.env.GOOGLE_SPREADSHEET_NAME, 'append');

1 Ответ

0 голосов
/ 23 сентября 2019

Ответ состоял в том, чтобы изменить valueInputOption на 'USER_ENTERED':

buildAppendOptions(sheet, data) {
    return {
      spreadsheetId: process.env.GOOGLE_SPREADSHEET_ID,
      range: sheet,
      valueInputOption: 'USER_ENTERED',
      insertDataOption: 'INSERT_ROWS',
      resource: {
        values: data
      }
    }
  }
...