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

时间:2019-05-03 09:21:16

标签: asp.net-core google-sheets google-sheets-api google-api-dotnet-client gs-conditional-formatting

我有以下非常简化的电子表格版本:

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

我想对所有值应用规则/规则,说:

背景颜色=绿色,如果:  -右侧的单元格不是空白,并且高于此值

背景颜色=红色,如果:  -右边的单元格不是空白且小于此值

背景颜色=白色(无操作),如果:  -右侧的单元格具有相同的值

此外,如果将该值设置为非数字“> 100”,则需要将此格式转换为100。

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

更新

在阅读下面的内容之前,请注意上面更新的表格示例

感谢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

它们在batchupdate请求中的索引如下: 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
              }
          });

问题在于它不会将条件格式应用于整个工作表,而仅将数据的第一列应用于

1 个答案:

答案 0 :(得分:0)

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

代码段(对于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
}