我使用LibreOffice Calc存储16种RGB颜色(B列中的红色,C中的绿色和D中的蓝色),然后我想用各自的颜色绘制16个单元格的背景。每种颜色都在一行中。
目前我已经能够部分实现这一目标:不仅画了16个细胞,还画了48个(16x3)!我似乎需要" group"嵌套循环。这是我的代码/宏:
function bgcolor()
Dim Doc, Sheet, CellPaint As Object
Dim CellR, CellG, CellB As String
Doc = ThisComponent
Sheet = Doc.Sheets.getByIndex(0)
For i = 1 to 16 step 1
For j = 1 to 3 step 1
CellR = Sheet.getCellByPosition(j+0,i).getValue()
CellG = Sheet.getCellByPosition(j+1,i).getValue()
CellB = Sheet.getCellByPosition(j+2,i).getValue()
CellPaint = Sheet.getCellByPosition(j+6,i)
CellPaint.CellBackColor = RGB(CellR,CellG,CellB)
next j
next i
bgcolor=CellPaint.CellBackColor
end function
这是结果:
第一列颜色(H)正是我所需要的。其他两列出现在那里,所以:我如何修复我的嵌套循环?可能我需要使用简单的if
语句来过滤它们,但我不确定。
编辑 - 供参考:解决方案应该类似于this one,但我已经读过它在OpenOffice上无法实现(我在LibreOffice上也没有考虑)
谢谢!
答案 0 :(得分:2)
放下内循环 - 你不需要横向迭代:
function bgcolor()
Dim Doc, Sheet, CellPaint As Object
Dim CellR, CellG, CellB As String
Doc = ThisComponent
Sheet = Doc.Sheets.getByIndex(0)
For i = 1 to 16 step 1
CellR = Sheet.getCellByPosition(1,i).getValue()
CellG = Sheet.getCellByPosition(2,i).getValue()
CellB = Sheet.getCellByPosition(3,i).getValue()
CellPaint = Sheet.getCellByPosition(7,i)
CellPaint.CellBackColor = RGB(CellR,CellG,CellB)
next i
bgcolor=CellPaint.CellBackColor
end function