Google 电子表格 API - 基于范围和相邻值的条件格式

Google Spreadsheets API - Conditional Formatting based on range and adjacent values

我有如下一个非常精简的传播版本sheet:

Sect   | Lbl    | A      | B       | C       | D       | E
==========================================================
Sec1   | Lbl1   | 1      | 8       | 6       | 10      |
----------------------------------------------------------
Sec2   | Lbl2   | 2      | 1       | 1       | >100    |
----------------------------------------------------------
etc...

我想对所有值应用 rule/rules 表示:

Bg 颜色 = 绿色如果: - 右侧单元格不为空且高于此值

Bg 颜色 = 红色,如果: - 右侧单元格不为空且小于此值

Bg 颜色 = 白色(无操作)如果: - 右边的单元格具有相同的值

此外,如果该值设置为非数字“>100”,我需要将其转换为 100 作为此格式的一部分。

我正在使用 C# 通过 Spreadsheets v4 API 来执行此操作。 到目前为止,我有下面的代码,但我不确定如何将多个条件应用于格式化规则。

更新

请注意上面更新的 table 示例,然后再阅读下面的内容

多亏了 TheMaster,我已经准备好了,运行 但还不完全正确。我有一个额外的因素:

到目前为止,这是我的 Red 规则 (where cell value > cell value to the right) 代码。 除此之外,我还有一个 Green 规则 (where cell value < cell value to the right) 和一个 White 规则 (where cell value = cell value to the right)

它们在批量更新请求中的索引如下: 0 = 红色 1 = 绿色 2 = 白色

Red 规则的代码:

formatRequest.Requests.Add(new Google.Apis.Sheets.v4.Data.Request()
          {
              AddConditionalFormatRule = new AddConditionalFormatRuleRequest()
              {
                  Rule = new ConditionalFormatRule()
                  {
                      BooleanRule = new BooleanRule()
                      {
                          Condition = new BooleanCondition()
                          {
                              Type = "CUSTOM_FORMULA",
                              Values = new List<ConditionValue>() {
                                  new ConditionValue()
                                  {
                                      UserEnteredValue = "=AND(NOT(ISBLANK(A2)),(1*REGEXEXTRACT(A2,\"\d+\"))>(1*REGEXEXTRACT(B2,\"\d+\")))"
                                  }
                              }
                          },
                           Format = new CellFormat()
                           {
                               BackgroundColor = new Color()
                               {
                                   Red = 0.8f,
                                   Green = 0f,
                                   Blue = 0f,
                                   Alpha = 1f
                               }
                           }
                      },
                      Ranges =  new List<GridRange>()
                      {
                          new GridRange()
                          {
                              SheetId = Convert.ToInt32(sheetId)
                              ,StartRowIndex = 1
                          },
                      }
                   },
                  Index = 0
              }
          });

问题是它没有将条件格式应用于整个 sheet...仅第一列数据。

  • 您应该使用 CUSTOM_FORMULA 作为布尔条件类型
  • 您需要添加两个条件格式规则 index 0 和 1
  • 范围将是开放式的并涵盖整个 sheet。

代码段(对于 A1:Z;Bg:red):

  • 布尔条件JSON:
{ 
  "type": "CUSTOM_FORMULA",
  "values": [
    {
      userEnteredValue: "=AND(NOT(ISBLANK(A1)),A1>(IF(ISNUMBER(B1),B1,1*REGEXEXTRACT(B1,\"\d+\"))))"
    }
  ]
}
  • BooleanRule/Format/BackgroundColor JSON:
{
  "red": 1,
  "green": 0,
  "blue": 0,
  "alpha": 1
}