我在 Windows 计算机上使用 Microsoft Word 创建了 100 多个 *.docx 文件,我想将其与 LibreOffice Writer 一起使用。
不知何故,所有表格都在 Writer 中被压缩,如下所示:
我尝试通过以下方式解决此问题:
size
optimal column width
我创建了以下宏来对单个表格进行格式化:
REM ***** BASIC *****
sub setTableColumns
rem ----------------------------------------------------------------------
rem define variables
dim document as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
dispatcher.executeDispatch(document, ".uno:SelectAll", "", 0, Array())
dispatcher.executeDispatch(document, ".uno:SelectAll", "", 0, Array())
dispatcher.executeDispatch(document, ".uno:SetOptimalColumnWidth", "", 0, Array())
end sub
我已为此宏指定了键盘快捷键,以便我可以通过以下方式重新格式化单个表格:
这是一个改进,但仍然需要大量的手动工作。
我还修改了这个不同的SO问题中给出的示例。
通过更改所有表格的此属性,我已成功将所有表格的相对宽度设置为 100%:
https://www.openoffice.org/api/docs/common/ref/com/sun/star/text/TextTable.html#RelativeWidth
我通过使用以下宏(片段)来完成此操作:
tables = ThisComponent.TextTables
for tid = 0 to tables.count - 1
table = tables(tid)
table.RelativeWidth = 100
next
这确实扩大了所有表格,但格式并不理想。
有没有办法将
optimal column width
设置应用于文件中的所有表格?
如果我可以将它一次应用到多个 docx 文件中的所有表,那就太棒了。
然而,如果我能够自动格式化单个 docx 文件中的所有表格,那已经让我非常高兴了。
代码需要循环遍历文档中的所有表格,选择每一个表格,然后对选定的表格进行优化。
以下来自 Andrew Pitonyak 宏文档第 7.2.1 节的基本代码显示了如何选择表格。
ThisComponent.getCurrentController().select(oTable)
这是我的一个项目中的一些Python代码。
cellsRange = table.getCellRangeByPosition(
0, 0, endCol, numRows - 1)
controller.select(cellsRange)
dispatcher.executeDispatch(
frame, ".uno:SetOptimalColumnWidth", "", 0, ())
还有循环遍历一组文档的方法,因此代码可以打开、优化、保存和关闭每个文档。最困难的部分是正确关闭而不发生崩溃,因为关闭事件有时会互相中断。
如果这是一个问题,您可能会发现手动打开、保存和关闭每个表格更容易,运行宏来优化当前打开文档中的所有表格。如果您发现同时打开多个文件更方便,那么循环浏览所有打开的文档也不是太难。