如何使用 LibreOffice Writer 自动将 docx 中所有表格的大小调整为最佳列宽?

问题描述 投票:0回答:1

问题

我在 Windows 计算机上使用 Microsoft Word 创建了 100 多个 *.docx 文件,我想将其与 LibreOffice Writer 一起使用。
不知何故,所有表格都在 Writer 中被压缩,如下所示:

start table

我尝试通过以下方式解决此问题:

  1. 选择整个表格(ctrl-a、ctrl-a)
  2. 右键单击表格
  3. 前往
    size
  4. 点击
    optimal column width

这确实给了我想要的结果:
desired table

到目前为止我已经尝试过的事情

失败的方法1

我创建了以下宏来对单个表格进行格式化:

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

我已为此宏指定了键盘快捷键,以便我可以通过以下方式重新格式化单个表格:

  1. 单击感兴趣的表格。
  2. 运行快捷方式。

这是一个改进,但仍然需要大量的手动工作。

失败的方法2

我还修改了这个不同的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 文件中的所有表格,那已经让我非常高兴了。

docx libreoffice libreoffice-writer
1个回答
1
投票

代码需要循环遍历文档中的所有表格,选择每一个表格,然后对选定的表格进行优化。

以下来自 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, ())

还有循环遍历一组文档的方法,因此代码可以打开、优化、保存和关闭每个文档。最困难的部分是正确关闭而不发生崩溃,因为关闭事件有时会互相中断。

如果这是一个问题,您可能会发现手动打开、保存和关闭每个表格更容易,运行宏来优化当前打开文档中的所有表格。如果您发现同时打开多个文件更方便,那么循环浏览所有打开的文档也不是太难。

© www.soinside.com 2019 - 2024. All rights reserved.