Public/New-ConditionalText.ps1

function New-ConditionalText {
    [CmdletBinding()]
    [Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseShouldProcessForStateChangingFunctions', '',Justification='Does not change system State')]
    param(
        #[Parameter(Mandatory=$true)]
        [Alias("ConditionValue")]
        $Text,
        [Alias("ForeGroundColor")]
        $ConditionalTextColor=[System.Drawing.Color]::DarkRed,
        $BackgroundColor=[System.Drawing.Color]::LightPink,
        [String]$Range,
        [OfficeOpenXml.Style.ExcelFillStyle]$PatternType=[OfficeOpenXml.Style.ExcelFillStyle]::Solid,
        [ValidateSet(
            "LessThan",        "LessThanOrEqual",      "GreaterThan",    "GreaterThanOrEqual",
            "Equal",           "NotEqual",
            "Top",             "TopPercent",           "Bottom",         "BottomPercent",
            "ContainsText",    "NotContainsText",      "BeginsWith",     "EndsWith",
            "ContainsBlanks",  "NotContainsBlanks",    "ContainsErrors", "NotContainsErrors",
            "DuplicateValues", "UniqueValues",
            "Tomorrow",        "Today",                "Yesterday",      "Last7Days",
            "NextWeek",        "ThisWeek",             "LastWeek",
            "NextMonth",       "ThisMonth",            "LastMonth",
            "AboveAverage",    "AboveOrEqualAverage",  "BelowAverage",  "BelowOrEqualAverage"
        )]
        [Alias("RuleType")]
        $ConditionalType="ContainsText"
    )

    $obj = [PSCustomObject]@{
        Text                 = $Text
        ConditionalTextColor = $ConditionalTextColor
        ConditionalType      = $ConditionalType
        PatternType          = $PatternType
        Range                = $Range
        BackgroundColor      = $BackgroundColor
    }

    $obj.pstypenames.Clear()
    $obj.pstypenames.Add("ConditionalText")
    $obj
}