1. 多种条件格式:不起作用。

1. 多种条件格式:不起作用。

我有一个工作记录电子表格,其中 B 列包含日期,我想添加两种条件格式:

  • 如果“B”列是星期一,则将上面的边框加粗。(以标记新一周的开始)。
  • 如果“B”列是当前日期($B1=TODAY()),则背景颜色应为黄色。(在屏幕截图中,我改用条件ISODD(DAY($B2))。)

我认为有三个选项可以做到这一点,但其中两个不起作用,而且由于添加了更多格式,其中一个变得脆弱。

是否有可能以比下面的选项 3 更好的方式获得所需的行为?

1. 多种条件格式:不起作用。

  • 在“格式 > 条件格式 > 管理”中,添加单独的条件格式,但指定范围相同。

这样会更易于维护,但看起来只应用了最后一个匹配条件。更糟糕的是,无法重新排列条件的顺序以更好地满足需求。

在此处输入图片描述

2. 多种条件:不起作用。

  • 为范围定义单一条件格式。
  • 为每个条件和格式添加一个条目。

这会失败,因为只会考虑第一个匹配的条件。

在此处输入图片描述

3. 复合条件:有效,但无法扩展。

  • 为该范围定义单一条件格式。
  • 在该条件格式中,定义三种情况,并为每种情况定义一种单独的格式:
    1. “星期一”和“今天”
    2. 周一
    3. 今天

这是可行的,因为对于单个条件格式,只应用第一个匹配的条件。但是它的扩展性很差,因为它需要为每个组合维护一个单独的条件和格式。

在两种条件下,这仍然是合理的,但如果我需要第三个条件(例如,为法定假日更改字体颜色),我已经需要 7 个条件和相关格式,这些条件和格式需要保持一致:通常对于 N 个条件,我需要 2 N -1 个案例(所有组合,除了不适用任何条件的情况)。

在此处输入图片描述

答案1

条件格式通常比宏更受欢迎。但是,如果由于需要的格式数量呈指数级增长,导致条件和格式的数量变得难以管理,那么可以编写宏。

在下面的 Basic 示例中,如果单元格大于 5 且等于 7,则将应用两种格式更改。右键单击工作表选项卡,选择工作表事件并将其分配给内容已更改事件。

Sub MultipleConditionalFormatting(oSheetCellRanges As Object)
    If oSheetCellRanges.supportsService("com.sun.star.sheet.SheetCell") Then
        oCellAddress = oSheetCellRanges.getCellAddress()
        oDoc = ThisComponent
        oSheet = oDoc.Sheets(oCellAddress.Sheet)
        oCell = oSheet.getCellByPosition(oCellAddress.Column, oCellAddress.Row)
        oCellRange = oSheet.getCellRangeByName(oSheetCellRanges.AbsoluteName)
        oCellRange.clearContents(_
            com.sun.star.sheet.CellFlags.HARDATTR OR _
            com.sun.star.sheet.CellFlags.STYLES OR _
            com.sun.star.sheet.CellFlags.EDITATTR)
        If oCell.getValue() > 5 Then
            oCell.CellBackColor = RGB(255,141,56)
        End If
        If oCell.getValue() = 7 Then
            oCell.CharWeight = com.sun.star.awt.FontWeight.ULTRABOLD
            oCell.CharHeight = "18"
        End If
    End If
End Sub

结果 - 注意7两种格式均已应用:

具有两种重叠格式规则的数字列表

更详细的讨论请见https://forum.openoffice.org/en/forum/viewtopic.php?f=9&t=89169。链接包含一个优雅但高级的 Python 示例,它使用以下方式设置格式设置数据数组()寻求通用解决方案。

关于命令,LO 5.4.5 及更高版本,使用向上/向下按钮重新排列条件。

用于条件格式的向上/向下按钮

相关内容