【问题标题】:How to get cell color in LibreOffice Basic?如何在 LibreOffice Basic 中获取单元格颜色?
【发布时间】:2018-09-04 11:41:42
【问题描述】:

我想使用 LibreOffice Basic 宏计算选择中黄色、橙色、绿色和红色的出现次数。我去过this Stackoverflow question,但它对我不起作用。

代码如下:

Sub Main
    dim selection,cell as Object
    dim i,j as integer
    selection = ThisComponent.getCurrentController().getSelection()

    for i=selection.RangeAddress.StartRow to selection.RangeAddress.EndRow
        for j=selection.RangeAddress.StartColumn to Selection.RangeAddress.EndColumn
            cell = ThisComponent.Sheets(0).getCellByPosition(i,j)
            print cell.CellBackColor
            rem TODO: Count colors
        next
    next
End Sub

它说-1,除非单元格颜色为黑色,然后它说0。我做错了什么?

【问题讨论】:

  • 可能是因为-1 表示没有单元格颜色而0 表示单元格颜色为黑色?您在这些单元格中尝试过其他颜色吗?
  • @Pᴇʜ 是的,我尝试了不同颜色的单元格,它总是显示-1。您可以从the documentation 获取颜色值。
  • -1 表示没有单元格背景颜色。所以我问了一些(也许是转储)问题,以确保:我们是在谈论 background 颜色还是 text 颜色?您是否有可能在错误的工作表Sheets(0) 上?还是错误的单元格位置?当您认为输出错误时,您检查了ij 的值吗?
  • @Pᴇʜ 我们正在谈论背景颜色。是的,我也检查了位置。将print cell.CellBackColor 更改为print cstr(i) & "x" & cstr(j) & ": " & cell.CellBackColor 并选择工作簿中唯一的工作表 上的绿色B16 会生成15x1: 0。但这次它显示0 表示非黑色单元格。这里有一股腥味……

标签: colors libreoffice libreoffice-basic


【解决方案1】:

我在getCellByPosition(i,j) 中切换了ij。实际上应该是getCellByPosition(j,i)

【讨论】:

  • 现在我记得为什么我总是使用iRowiCol 作为计数器。它比i,j 更具描述性:)
  • @Pᴇʜ 实际上,我混淆了 getCellByPosition 中哪个参数排在第一位。我认为 LibreOffice Basic 上的文档是轻视的——我必须从像这样的问题中收集我所知道的一切,因为我在官方文档中找不到太多信息。这一点转到 MS Office...
  • 搜索“uno api getCellByPosition”生成openoffice.org/api/docs/common/ref/com/sun/star/table/…,显示参数为(nColumn, nRow)。
  • @JimK 谢谢,这看起来有点像文档更好
猜你喜欢
  • 1970-01-01
  • 2023-03-09
  • 2012-08-18
  • 1970-01-01
  • 1970-01-01
  • 2011-12-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多