如何在 LibreOffice Calc 中使用 PyUNO 更改单元格边框的 LineWidth?

Posted

技术标签:

【中文标题】如何在 LibreOffice Calc 中使用 PyUNO 更改单元格边框的 LineWidth?【英文标题】:How to change the LineWidth of a cell border using PyUNO in LibreOffice Calc? 【发布时间】:2020-09-18 23:39:55 【问题描述】:

我正在编写一个 Python 脚本来自动调整 LibreOffice Calc 中的单元格边框。我想我知道我需要更改什么属性,但是当我为该属性分配新值时,该值不会改变。

例如,我编写了这段代码来将单个 Cell 的 TopLine.LineWidth 从 0 更改为 10。

# Access the current calc document
model = desktop.getCurrentComponent()
# Access the active sheet
active_sheet = model.CurrentController.ActiveSheet
# Get the cell and change the value of LineWidth
cell = active_sheet.getCellByPosition(2, 2)
cell.TableBorder2.TopLine.LineWidth = 10

运行此代码后我没有收到任何错误。而且我还确保我正在访问我想要修改的单元格。但是,此代码不会更改单元格的边框宽度。

我尝试通过在赋值前后打印值来进行一些调试:

# This first print statement returns 0 because the cell has no borders
print(cell.TableBorder2.TopLine.LineWidth)
cell.TableBorder2.TopLine.LineWidth = 10
# This second print statement still returns 0, but I was expecting it to return 10
print(cell.TableBorder2.TopLine.LineWidth)

有谁知道我做错了什么?

【问题讨论】:

【参考方案1】:

您需要将单元格属性设置为已更改的边框对象。来自https://ask.libreoffice.org/en/question/145885/border-macro-no-longer-works/:

aThinBorder = oRange.TopBorder2
aThinBorder.LineWidth = 1
oRange.TopBorder2 = aThinBorder

【讨论】:

成功了!谢谢!我只是发现很难确定要在 LO Python 宏中更改的确切属性。【参考方案2】:

所以,经过大量研究,我找到了至少三种更改边框设置的方法。因为我花了很多力气,所以我想我应该把它们留在这里,以便将来其他人更容易找到答案。

在所有示例中,我将单个单元格的 TopBorder 的 LineWidth 设置为 10。

方法一:使用getPropertyValue()和setPropertyValue()

cell = active_sheet.getCellByPosition(1, 1)
border_prop = cell.getPropertyValue("TopBorder")
border_prop.LineWidth = 10
cell.setPropertyValue("TopBorder", border_prop)

方法 2(来自 Jim K 的回答)

cell = active_sheet.getCellByPosition(1, 1)
border_prop = cell.TopBorder2
border_prop.LineWidth = 10
cell.TopBorder2 = border_prop

方法 3:使用 BorderLine2 结构

border_prop = uno.createUnoStruct("com.sun.star.table.BorderLine2")
border_prop.LineWidth = 10
cell = active_sheet.getCellByPosition(1, 1)
cell.setPropertyValue("TopBorder", border_prop)

【讨论】:

以上是关于如何在 LibreOffice Calc 中使用 PyUNO 更改单元格边框的 LineWidth?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 LibreOffice Calc 中使用 PyUNO 更改单元格边框的 LineWidth?

如何在 LibreOffice Calc 中交换两个单元格

LibreOffice (Calc) VBA 单元格总和(按索引)

LibreOffice Calc,如何计算表格中的列数?

如何通过 LibreOffice 的 Calc 中的正则表达式语句捕获公司名称

Libreoffice calc - 如何将相同的值写入范围