格式化来自 API V4 的 google 工作表中的单元格

Format cells in google sheets from API V4

我在查看文档后开始使用 Google Sheets api 进行开发,有几件事我不明白或找不到。

这是我正在测试的端点:

spreadsheets.values.batchUpdate

https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/batchUpdate

我想做的是将 API 中的单元格格式化为纯文本,这与我通过单击 Format > Number > Plain text[=23= 中的传播sheet 所做的相同]

我应该如何从 API 创建 JSON 以将相同的格式应用于整个列?

这是当我将 sheet 本身的单元格格式设置为 Plain Text 时发生的情况:

  1. 这是我要格式化的单元格:

  1. 我就是这样做的:

Format > Number > Plain text

  1. 这是结果:

当我将 google API:

中的同一单元格格式化为纯文本时会发生这种情况
  1. 这是我申请的JSON:

         "requests": [
           {
             "repeatCell": {
               "range": {
                 "sheetId": 3,
                 "startColumnIndex": 1,
                 "endColumnIndex": 2,
                 "startRowIndex": 1,
                 "endRowIndex": 2
               },
               "cell": {
                 "userEnteredFormat": {
                   "numberFormat": {
                     "type": "TEXT"
                   }
                 }
               },
               "fields": "userEnteredFormat.numberFormat"
             }
           }
         ]
       }```
    
    
  2. 这是结果:

我的问题: 我怎样才能从 API 做我直接从 sheet 做的同样的事情?

我遇到过和你一样的情况。当时,作为一种解决方法,我使用了以下流程。

  1. 从 sheet 中检索值作为格式化值。
  2. 将 sheet 上的值作为字符串值。

当这个变通办法反映在脚本中时,它变成如下。

示例脚本:

const spreadsheetId = "###"; // Please set the Spreadsheet ID.
const sheetName = "Sheet1"; // Please set the sheet name.
const sheets = google.sheets({ version: "v4", auth }); // Please use your authorization script.

const values = await sheets.spreadsheets.values.get({
  spreadsheetId,
  range: sheetName,
  valueRenderOption: "FORMATTED_VALUE",
});
const res = await sheets.spreadsheets.values.update({
  spreadsheetId,
  range: sheetName,
  valueInputOption: "RAW",
  resource: { values: values.data.values },
});

结果:

使用该脚本时,得到如下结果。

发件人:

收件人:

注:

  • 此示例脚本使用 sheet。如果要使用具体范围,请修改range.

  • 在此脚本中,数字格式更改为Automatic。如果您想将其更改为 Plain text,请使用以下脚本代替上面的脚本。

      const spreadsheetId = "###"; // Please set the Spreadsheet ID.
      const sheetName = "Sheet1"; // Please set the sheet name.
      const sheets = google.sheets({ version: "v4", auth }); // Please use your authorization script.
      const sheetId = 0; // Please set the sheet ID of "sheetName".
    
      const values = await sheets.spreadsheets.values.get({
        spreadsheetId,
        range: sheetName,
        valueRenderOption: "FORMATTED_VALUE",
      });
      const requests = values.data.values.map((r, i) =>
        r.map((c, j) => ({
          updateCells: {
            range: {
              sheetId: sheetId,
              startRowIndex: i,
              endRowIndex: i + 1,
              startColumnIndex: j,
              endColumnIndex: j + 1,
            },
            rows: [
              {
                values: [
                  {
                    userEnteredFormat: {
                      numberFormat: {
                        type: "TEXT",
                      },
                    },
                    userEnteredValue: {
                      stringValue: c,
                    },
                  },
                ],
              },
            ],
            fields: "userEnteredFormat.numberFormat,userEnteredValue",
          },
        }))
      );
      const res = await sheets.spreadsheets.batchUpdate({
        spreadsheetId,
        resource: { requests },
      });
    

参考文献: