更新 Google 电子表格中的工作表 (ruby api)

Updating a worksheetsheet within a Google Spreadsheet (ruby api)

我找到了一种将新工作表添加到现有电子表格的方法,但我似乎无法弄清楚如何格式化添加的工作表。

例如,我可以使用以下方法为电子表格中第一个工作表(即默认工作表)的 header 行着色:

  def color_header_row(file)
    spreadsheet_id = file.id
    requests = {
      requests: [
        {
          repeat_cell: {
            range: {
              sheet_id: 0,
              start_row_index: 0,
              end_row_index: 1
            },
            cell: {
              user_entered_format: {
                background_color: { red: 0.0, green: 0.4, blue: 0.0 },
                horizontal_alignment: "CENTER",
                text_format: {
                  foreground_color: {
                    red: 1.0,
                    green: 1.0,
                    blue: 1.0
                  },
                  font_size: 12,
                  bold: true
                }
              }
            },
            fields: 'userEnteredFormat(backgroundColor,textFormat,horizontalAlignment)'
          },
        }
      ]
    }
    sheet_service.batch_update_spreadsheet(spreadsheet_id, requests, {})
  end

请注意,默认工作表 sheet_id 是 0 因此我的假设(考虑到 GridRange 在 documentation 中的定义方式)是设置 sheet_id 到 1 将导致引用新添加的工作表(本质上是位置 1 的工作表)。然而,当 sheet_id 设置为 1 时,返回错误 Invalid request(Google::Apis::ClientError)

知道如何格式化 non-default 工作表的 header 行吗?

我认为您的目标和现状如下。

  • 您想在 Google Spreadsheet 中使用 repeat_cell 作品 sheet,除了 sheet ID 0
  • 您想使用 googleapis 实现此目的 ruby。
  • 您已经能够使用表格 API.
  • 获取和放置 Spreadsheet 的值

在这种情况下,使用sheet名称和spreadsheets.get方法检索sheet ID怎么样?在 Spreadsheet 中,不能使用相同的 sheet 名称。所以,在这种情况下,我认为这个方向可能对你的情况有用。当这反映到您的脚本中时,它会变成如下。

修改后的脚本:

在此脚本中,使用“Sheet2”的 sheet 名称检索 sheet ID,检索到的 sheet ID 用于 repeat_cell 请求。

sheet_name = 'Sheet2' # Please set the sheet name.

spreadsheet_id = file.id
response = sheet_service.get_spreadsheet(spreadsheet_id, ranges: [sheet_name], fields: 'sheets(properties)')
sheet_id = response.sheets[0].properties.sheet_id

requests = {
  requests: [
    {
      repeat_cell: {
        range: {
          sheet_id: sheet_id,
          start_row_index: 0,
          end_row_index: 1
        },
        cell: {
          user_entered_format: {
            background_color: { red: 0.0, green: 0.4, blue: 0.0 },
            horizontal_alignment: "CENTER",
            text_format: {
              foreground_color: {
                red: 1.0,
                green: 1.0,
                blue: 1.0
              },
              font_size: 12,
              bold: true
            }
          }
        },
        fields: 'userEnteredFormat(backgroundColor,textFormat,horizontalAlignment)'
      },
    }
  ]
}
sheet_service.batch_update_spreadsheet(spreadsheet_id, requests, {})

注:

  • 如果要使用sheet索引检索sheet ID(例如,第一个和第二个sheet是01。),您还可以使用以下脚本。

      sheet_index = 1
      response = sheet_service.get_spreadsheet(spreadsheet_id, fields: 'sheets(properties)')
      sheet_id = response.sheets[sheet_index].properties.sheet_id
    

参考: