我试图通过使用TableColumnRelativeSum设置每行分隔符的位置来计算适当的相对位置,从而将表中所有单元格的宽度设置为某个值。有必要使用相对值,因为正如TableColumnSeparator 文档解释的那样:
表格的实际宽度取决于环境(页面样式和表格位置处的文本列数、对齐方式以及左右边距)。因此,表格列分隔符不包含列宽的度量值。这些值与属性 TextTable::TableColumnRelativeSum 的值相关。
所以我得到了这段代码,它运行没有错误,而且似乎可以工作。但是,在某些表上(并非所有行都相同的“复杂”表),某些分隔符不会移动。
Sub Main
dim tables as object
dim table as object
dim tid as integer
' Get table
tables = ThisComponent.TextTables
table = tables.getByName("Table5")
tableWidthRelative = table.TableColumnRelativeSum
tableWidthIn = 5.5
columnWidthIn = 0.89
columnWidthRelative = columnWidthIn / tableWidthIn * tableWidthRelative
' Get rows
rows = table.getRows()
for i = 0 to (rows.Count() - 1)
row = rows.getByIndex(i)
' Seps
seps = row.TableColumnSeparators
' TableColumnSeparators is a Sequence, which does not support the Count method. You must use UBound() to get its length.
numSeps = UBound(seps)
for s = 0 to numSeps
sep = seps(s)
sep.Position = columnWidthRelative * (s+1)
seps(s) = sep
next
row.TableColumnSeparators = seps
table.Rows(i) = row
next
end sub
我把它放在这里是因为试图弄清楚它真是一团糟,也许有一天这会对某人有所帮助。
最后,最有效的方法是使用 Bash 脚本将键盘输入发送到 LibreOffice,使用xdotool
.
在 LibreOffice 网站上有更多关于这个问题的详细信息。