Как покрасить половину клетки Excel?

Фон: мне нужно покрасить выделенную клетку в красный или зеленый цвет. Если ячейка больше нуля, мне нужно покрасить ячейку в зеленый цвет (справа от середины ячейки), если ячейка меньше нуля, мне нужно покрасить ячейку в красный цвет (слева от середины ячейки)).

Я использую библиотеку "Microsoft.Office.Interop.Excel".

Как мне это сделать?

PS Изменение цвета ячейки В Excel использование C# не является дубликатом, потому что я хочу закрасить только половину ячейки Excel, а не полную.

2 ответа

Решение

Это (a) может быть обманом (b) возможно лучше как Комментарий (но тогда не было бы изображения) и (c) возможно увеличение значения тега [excel] здесь, но может представлять некоторый интерес упомянуть, что CF можно достичь чего-то в этом роде:

SO39243927 первый пример

Столбец B (красная заливка) форматируется с помощью правила формулы:

=$B1<0  

и ColumnC (зеленая заливка) с правилом формулы:

=$B1>0  

Обманная часть состоит в том, что B:C были уменьшены по ширине и отформатированы по центру.

Нечто похожее на Sparklines:

SO39243927 второй пример

В комментарии (со ссылкой на изображение) @BrakNicku указал, что панели данных могут быть применены (и изображение скорее доказывает, что можно наполовину заполнить ячейку Excel цветом). Вариант, также столбцы данных, должен иметь длину, пропорциональную основному значению:

SO39243927 третий пример

Чтобы решить эту проблему, я использовал данную схему:

  1. Создание макросов в VBA (с помощью мыши).
  2. Перепишите макросы в общий вид.
  3. Сохраните макросы в приложении C#.
  4. Сохраните макросы в файл Excel (xlsm) на C#.
  5. Запустите макросы из C#.

Данный макрос:

Sub CreateGistograms(r As String)
    Range(r).Select
    Selection.FormatConditions.AddDatabar
    Selection.FormatConditions(Selection.FormatConditions.Count).ShowValue = True
    Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
    With Selection.FormatConditions(1)
        .MinPoint.Modify newtype:=xlConditionValueAutomaticMin
        .MaxPoint.Modify newtype:=xlConditionValueAutomaticMax
    End With
    With Selection.FormatConditions(1).BarColor
        .Color = 8700771
            .TintAndShade = 0
        End With
        Selection.FormatConditions(1).BarFillType = xlDataBarFillGradient
        Selection.FormatConditions(1).Direction = xlContext
        Selection.FormatConditions(1).NegativeBarFormat.ColorType = xlDataBarColor
        Selection.FormatConditions(1).BarBorder.Type = xlDataBarBorderSolid
        Selection.FormatConditions(1).NegativeBarFormat.BorderColorType = _
            xlDataBarColor
        With Selection.FormatConditions(1).BarBorder.Color
            .Color = 8700771
        .TintAndShade = 0
    End With
    Selection.FormatConditions(1).AxisPosition = xlDataBarAxisAutomatic
    With Selection.FormatConditions(1).AxisColor
        .Color = 0
        .TintAndShade = 0
    End With
    With Selection.FormatConditions(1).NegativeBarFormat.Color
        .Color = 255
        .TintAndShade = 0
    End With
    With Selection.FormatConditions(1).NegativeBarFormat.BorderColor
        .Color = 255
        .TintAndShade = 0
    End With
End Sub

Как сохранить макрос и запустить его из C# создать макрос во время выполнения в dotnet

Другие вопросы по тегам