如何以编程方式在 LibreOffice Calc 中触发 AutoFit / SetOptimalHeight?

Posted

技术标签:

【中文标题】如何以编程方式在 LibreOffice Calc 中触发 AutoFit / SetOptimalHeight?【英文标题】:How to trigger AutoFit / SetOptimalHeight in LibreOffice Calc programmatically? 【发布时间】:2021-02-27 19:36:51 【问题描述】:

我正在使用 unoconv 转换 XLSX => PDF。我需要 LibreOffice 来包装文本并根据 XLSX 文件的内容动态增加行高。有没有办法以编程方式执行此操作,可能在 unoconv/soffice 级别?

【问题讨论】:

【参考方案1】:

对我们有用的唯一方法是修补 unoconv,以便它在打开文档后立即执行以下操作:

全选 触发选择的最佳行高

从python来看,是这样的:

frame = document.CurrentController.Frame
dispatcher = self.unosvcmgr.createInstanceWithContext("com.sun.star.frame.DispatchHelper", self.context)
dispatcher.executeDispatch(frame, ".uno:SelectAll", "", 0, ())
dispatcher.executeDispatch(frame, ".uno:SetOptimalRowHeight", "", 0, UnoProps(aExtraHeight=0))

补丁文件在这里:https://gist.github.com/ldiqual/065aada05cfb50443bc67fc3ae99ea14

这就是它在 Docker 中的应用方式:

ENV UNO_URL https://raw.githubusercontent.com/unoconv/unoconv/master/unoconv
COPY ./unoconv.patch /tmp/unoconv.patch
RUN curl -Ls $UNO_URL -o /usr/local/bin/unoconv \
  && patch /usr/local/bin/unoconv /tmp/unoconv.patch \
  && chmod +x /usr/local/bin/unoconv \
  && rm /tmp/unoconv.patch \

【讨论】:

以上是关于如何以编程方式在 LibreOffice Calc 中触发 AutoFit / SetOptimalHeight?的主要内容,如果未能解决你的问题,请参考以下文章

如何将数据从 LibreOffice Calc 导入 SQL 数据库?

在 Basic 中计算自己的对数(LibreOffice Calc Macro)

如何从 MySQL 数据库实时更新 LibreOffice Calc 单元格?

如何以编程方式修改 Open/Libreoffice odt 文档?

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

LibreOffice Calc / OpenOffice Calc / Excel:如何显示负持续时间?