如何在LibreOffice Basic中获取单元格颜色并统计选中区域指定颜色出现次数?
LibreOffice Basic宏:统计选中区域指定颜色单元格次数
嘿,我帮你把这个统计颜色单元格的宏搞定啦!之前你参考的代码大概率是没处理好LibreOffice颜色格式的坑,或者单元格获取的逻辑有问题,下面是完整可运行的版本,还附带了自定义颜色值的获取方法:
完整统计宏代码
把这段代码复制到LibreOffice的宏编辑器里(按Alt+F11打开),直接运行就能用:
Sub CountColoredCells Dim oSelection As Object Dim oRangeAddress As Object Dim oSheet As Object Dim oCell As Object Dim iRow As Integer, iCol As Integer Dim iYellow As Integer, iOrange As Integer, iGreen As Integer, iRed As Integer ' 初始化四个颜色的计数器 iYellow = 0 iOrange = 0 iGreen = 0 iRed = 0 ' 获取当前选中的区域 oSelection = ThisComponent.getCurrentController().getSelection() ' 先判断选中的是不是单元格区域,避免选到其他对象报错 If oSelection.supportsService("com.sun.star.table.XCellRange") Then oRangeAddress = oSelection.RangeAddress oSheet = ThisComponent.Sheets(oRangeAddress.Sheet) ' 遍历选中区域的每一行每一列 For iRow = oRangeAddress.StartRow To oRangeAddress.EndRow For iCol = oRangeAddress.StartColumn To oRangeAddress.EndColumn ' 定位到当前单元格 oCell = oSheet.getCellByPosition(iCol, iRow) ' 获取单元格背景色的BGR格式数值(划重点:LibreOffice用的是BGR不是RGB!) Dim oCellBackColor As Long oCellBackColor = oCell.CellBackColor ' 根据BGR值判断颜色并计数,下面是标准黄橙绿红的对应值 Select Case oCellBackColor Case &HFFFF00 ' 标准黄色(BGR格式对应RGB(255,255,0)) iYellow = iYellow + 1 Case &HFFA500 ' 标准橙色(BGR格式对应RGB(255,165,0)) iOrange = iOrange + 1 Case &H00FF00 ' 标准绿色(BGR格式对应RGB(0,255,0)) iGreen = iGreen + 1 Case &HFF0000 ' 标准红色(BGR格式对应RGB(255,0,0)) iRed = iRed + 1 End Select Next iCol Next iRow ' 弹出窗口展示统计结果 MsgBox "颜色统计结果:" & Chr(13) & _ "黄色单元格:" & iYellow & Chr(13) & _ "橙色单元格:" & iOrange & Chr(13) & _ "绿色单元格:" & iGreen & Chr(13) & _ "红色单元格:" & iRed, 0, "统计完成" Else ' 如果没选中区域,提示用户 MsgBox "请先选中一个单元格区域哦!", 0, "温馨提示" End If End Sub
自定义颜色值获取工具
如果你的黄橙绿红不是标准色,而是自定义的,用这个小宏就能获取准确的颜色值:
Sub GetCellBackColor Dim oCell As Object oCell = ThisComponent.getCurrentController().getSelection() ' 选中单个颜色单元格后运行 If oCell.supportsService("com.sun.star.table.XCell") Then MsgBox "该单元格背景色的BGR值:" & Hex(oCell.CellBackColor), 0, "颜色值查询" Else MsgBox "请选中单个目标颜色的单元格!", 0, "提示" End If End Sub
使用方法:选中你要统计的颜色的单元格,运行这个宏,把弹出的十六进制值替换到上面统计宏的Select Case对应的Case值里就行。
小提示
- 运行宏前记得先选中要统计的单元格区域
- 宏编辑器里保存代码的时候,要存在My Macros里,不然下次打开LibreOffice会找不到
内容的提问来源于stack exchange,提问作者lukmi
相关产品推荐
相关产品推荐

