API листов Google не может установить формат по умолчанию - PullRequest
1 голос
/ 05 марта 2020

Согласно https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets#SpreadsheetProperties я должен уже иметь возможность установить defaultFormat при создании листа Google, чтобы не добавлять его ко всем ячейкам после добавления моих данных.

Это ничего не делает, хотя. Я знаю, что verticalAlignment существует, потому что, если я сделаю опечатку, он пожалуется на отсутствие свойства.

В чем может быть проблема?

return new Promise((resolve, reject) => {
    const sheets = google.sheets({version: 'v4', auth});
    const request = {
        resource: {
          properties: {
            title: "This is the sheet title",
            defaultFormat: {
              "verticalAlignment": "TOP"
            }
          },
          sheets: [
            {
              properties: {
                title: "The first tab"
              }
            }
          ]
        },
        auth: auth,
    };
    sheets.spreadsheets.create(request, (err, response) => {
        if (err) {
            return reject(err);
        }
        resolve(response);
    });
});

1 Ответ

2 голосов
/ 06 марта 2020
  • Вы хотите создать новую электронную таблицу с {"defaultFormat": {"verticalAlignment": "TOP"}} с помощью API Sheets.
  • Вы хотите добиться этого с помощью googleapis с Node.js.
  • Вы уже смогли получить и поместить значения для Spreadsheet с помощью API Sheets.

Если мое понимание верно, как насчет этого ответа? Пожалуйста, подумайте об этом как об одном из нескольких возможных ответов.

Проблема и обходной путь:

Я думаю, что причиной вашей проблемы может быть то, что defaultFormat в SpreadsheetProperties - This field is read-only.. Ref

Чтобы создать новую электронную таблицу с использованием {"verticalAlignment": "TOP"}, как насчет следующих обходных путей?

Шаблон 1:

В этом шаблоне "verticalAlignment": "TOP" используется для листа с использованием метода «создать». В этом случае каждая ячейка должна быть установлена ​​с { userEnteredFormat: { verticalAlignment: "TOP" } }, как показано ниже.

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

return new Promise((resolve, reject) => {
  const sheets = google.sheets({ version: "v4", auth });
  let rowData = [];
  for (let r = 0; r < 1000; r++) {
    let row = [];
    for (let c = 0; c < 26; c++) {
      row[c] = { userEnteredFormat: { verticalAlignment: "TOP" } };
    }
    rowData.push({ values: row });
  }
  const request = {
    resource: {
      properties: { title: "This is the sheet title" },
      sheets: [
        {
          properties: { title: "The first tab" },
          data: { rowData: rowData }
        }
      ]
    }
  };
  sheets.spreadsheets.create(request, (err, response) => {
    if (err) {
      return reject(err);
    }
    resolve(response.data);
  });
});
  • В этом случае лист по умолчанию имеет 1000 строк и 26 столбцов. Итак, я использовал выше для циклов.

Шаблон 2:

В этом шаблоне сначала создается новая электронная таблица, а затем "verticalAlignment": "TOP" задается методом " batchUpdate ".

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

return new Promise((resolve, reject) => {
  const sheets = google.sheets({ version: "v4", auth });
  const request = {
    resource: {
      properties: { title: "This is the sheet title" },
      sheets: [{ properties: { title: "The first tab" } }]
    }
  };
  sheets.spreadsheets.create(request, (err, response) => {
    if (err) {
      return reject(err);
    }
    sheets.spreadsheets.batchUpdate(
      {
        spreadsheetId: response.data.spreadsheetId,
        resource: {
          requests: [
            {
              repeatCell: {
                range: {
                  sheetId: response.data.sheets[0].properties.sheetId
                },
                cell: {
                  userEnteredFormat: {
                    verticalAlignment: "TOP"
                  }
                },
                fields: "userEnteredFormat.verticalAlignment"
              }
            }
          ]
        }
      },
      function(err, response) {
        if (err) {
          return reject(err);
        }
        resolve(response.data);
      }
    );
  });
});

Ссылки:

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

...