Google Spreadsheets API - условное форматирование на основе диапазона и смежных значений - PullRequest
0 голосов
/ 03 мая 2019

У меня есть следующая очень упрощенная версия электронной таблицы:

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

Я хочу применить правило / правила ко всем значениям, чтобы сказать:

Bg Цвет = Зеленый, если: -ячейка справа не пуста и превышает это значение

Bg Color = Red, если: - ячейка справа не пуста и меньше этого значения

Bg Color = white (никаких действий), если: - ячейка справа имеет то же значение

Кроме того, если для значения задано нечисловое значение "> 100", мне необходимо преобразовать его в 100 в рамках этого форматирования,

Я использую C # для этого с помощью API Spreadsheets v4.Пока у меня есть код ниже, но я не уверен, как я могу применить несколько условий к правилу форматирования.

Обновление

Пожалуйста, обратите внимание на обновленный пример таблицы выше, прежде чем читать ниже

Благодаря 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
              }
          });

Проблема в том, что оно не применяет условное форматирование ко всему листу ... только к первому столбцу данных.

1 Ответ

0 голосов
/ 03 мая 2019
  • Вы должны использовать CUSTOM_FORMULA в качестве логического условия Тип
  • Вам нужно будет добавить два правила условного форматирования с index 0 и 1
  • Диапазон будет открыт.закончили и покройте полный лист.

Фрагмент (для A1: Z; Bg: красный):

  • Логическое условие 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
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...