【问题标题】:Updating a worksheetsheet within a Google Spreadsheet (ruby api)在 Google 电子表格 (ruby api) 中更新工作表
【发布时间】:2021-06-12 03:57:08
【问题描述】:

我想出了一种将新工作表添加到现有电子表格的方法,但我似乎不知道如何格式化添加的工作表。

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

  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,因此我的假设(考虑到 documentation 中如何定义 GridRange)是将 sheet_id 设置为 1 将导致引用新添加的工作表(本质上是位置1的工作表)。然而当 sheet_id 设置为 1 时,返回错误 Invalid request(Google::Apis::ClientError)

知道如何格式化非默认(即不在电子表格中的第一个位置的工作表)工作表的标题行吗?

【问题讨论】:

    标签: ruby google-sheets google-sheets-api google-apis-explorer google-api-ruby-client


    【解决方案1】:

    我相信你的目标和你目前的情况如下。

    • 您希望将repeat_cell 用于 Google 电子表格中的工作表,但工作表 ID 0 除外。
    • 您希望使用 googleapis for ruby​​ 来实现此目的。
    • 您已经能够使用 Sheets API 获取和放置电子表格的值。

    在这种情况下,如何通过电子表格.get 方法使用工作表名称检索工作表ID?在电子表格中,不能使用相同的工作表名称。所以,在这种情况下,我认为这个方向可能对你的情况有用。当这反映到您的脚本中时,它变成如下。

    修改脚本:

    在此脚本中,工作表 ID 使用工作表名称“Sheet2”检索,检索到的工作表 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, {})
    

    注意:

    • 如果您想使用工作表索引检索工作表 ID(例如,第 1 和第 2 个工作表分别为 01。),您还可以使用以下脚本。

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

    参考:

    【讨论】:

    • 嗨@tanaike!感谢您抽出宝贵时间提供并解释您的反馈/解决方案;非常感激。您的解决方案是正确的,但我想出了如何使用创建新电子表格时返回的响应来检索 sheet_id。由于这避免了另一个服务器调用,我决定改用我的解决方案。
    • @SavageSuga 感谢您的回复和其他信息。我很高兴你的问题得到了解决。也谢谢你。
    猜你喜欢
    • 2021-07-02
    • 1970-01-01
    • 2014-07-04
    • 1970-01-01
    • 1970-01-01
    • 2016-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多