使用 OpenOffice.org 基本宏以编程方式将 *.odt 文件转换为 MS Word *.doc 文件

Posted

技术标签:

【中文标题】使用 OpenOffice.org 基本宏以编程方式将 *.odt 文件转换为 MS Word *.doc 文件【英文标题】:Programmatically convert *.odt file to MS Word *.doc file using an OpenOffice.org basic macro 【发布时间】:2009-08-27 11:46:18 【问题描述】:

我正在尝试构建一个 reStructuredText 到 MS Word 文档工具链,因此我将能够在版本控制中仅保存 rst 源。

到目前为止我——

有rst2odt.py 将reStructuredText 转换为OpenOffice.org Writer 格式。

接下来我想使用最新的 OpenOffice.org(目前是 3.1),它在生成 Word 97/2000/XP 文档方面做得相当不错,所以我编写了宏:

sub ConvertToWord(file as string)
  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")

  rem ----------------------------------------------------------------------
  dim odf(1) as new com.sun.star.beans.PropertyValue
  odf(0).Name = "URL"
  odf(0).Value = "file://" + file + ".odt"
  odf(1).Name = "FilterName"
  odf(1).Value = "MS Word 97"
  dispatcher.executeDispatch(document, ".uno:Open", "", 0, odf())

  rem ----------------------------------------------------------------------
  dim doc(1) as new com.sun.star.beans.PropertyValue
  doc(0).Name = "URL"
  doc(0).Value = "file://" + file + ".doc"
  doc(1).Name = "FilterName"
  doc(1).Value = "MS Word 97"

  dispatcher.executeDispatch(document, ".uno:SaveAs", "", 0, doc())
end sub

但是当我执行它时:

soffice "macro:///Standard.Module1.ConvertToWord(/path/to/odt_file_wo_ext)"

我收到:“BASIC 运行时错误。找不到属性或方法。”留言在线:

document   = ThisComponent.CurrentController.Frame

当我评论那一行时,上面的调用完成没有错误,但什么也不做。 我想我需要以某种方式将document 的值设置为新创建的实例,但我不知道该怎么做。

或者我是在完全倒退吗?

附:我会考虑将JODConverter 作为备用方案,因为我会尽量减少我的依赖关系。

【问题讨论】:

【参考方案1】:

我建议使用 JODConverter(您的后备),因为您可以获得所需的内容,并且当/如果 OpenOffice/LibreOffice 改进其 DOC 过滤器时,您不必每次都安装/升级/测试您的宏。它也得到了很好的证明。

【讨论】:

以上是关于使用 OpenOffice.org 基本宏以编程方式将 *.odt 文件转换为 MS Word *.doc 文件的主要内容,如果未能解决你的问题,请参考以下文章

怎么可能没有。以编程方式获取 OpenOffice.org 电子表格中的页数?

OpenOffice Basic 宏与 openoffice API

如何阅读 OpenOffice.org 文本文档

是否有适用于 Delphi(非 OLE)的 OpenOffice.org 导出组件?

使用 Jodconverter 和 openoffice.org 将 PPT 转换为 JPG

处理 OpenOffice.org 的“保存/关闭事件”