kdb*_*kdb 5 conditional-formatting libreoffice
我有一个工作日志电子表格,其中 B 列包含日期,我想添加两种条件格式:
$B1=TODAY()),则背景颜色应为黄色。(在屏幕截图中,我使用了条件ISODD(DAY($B2))。)我认为三个选项可以做到这一点,但两个不起作用,一个随着添加更多格式而变得脆弱。
是否有可能以比下面的选项 #3 更好的方式获得所需的行为?
这会更易于维护,但看起来只应用了最后一个匹配条件。更糟糕的是,不可能重新排列条件的顺序以更好地满足需求。
这会失败,因为只会考虑第一个匹配条件。
这是可行的,因为对于单个条件格式,仅应用第一个匹配条件。然而,它的扩展性确实很差,因为它需要为每个组合维护单独的条件和格式。
在两个条件下,这仍然是合理的,但如果我需要第三个条件(例如,更改法定节假日的字体颜色),我已经需要 7 个条件和相关的格式,需要保持一致:通常对于 N 个条件,我' d 需要 2 N -1 种情况(所有组合,除了没有任何条件适用的情况)。
条件格式通常优于宏。但是,如果由于所需的格式数量呈指数级增长,条件和格式的数量变得难以管理,则可以改为编写宏。
在下面的基本示例中,如果单元格既大于 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
Run Code Online (Sandbox Code Playgroud)
结果 - 请注意,7应用了两种格式:
更长的讨论位于https://forum.openoffice.org/en/forum/viewtopic.php?f=9&t=89169。该链接包含一个优雅但高级的 python 示例,该示例使用setDataArray()设置格式以实现通用解决方案。
关于顺序,在LO 5.4.5 及更高版本中,使用向上/向下按钮重新排列条件。
| 归档时间: |
|
| 查看次数: |
2799 次 |
| 最近记录: |