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

时间:2009-08-27 11:46:18

标签: automation ms-word openoffice.org openoffice-basic

我正在尝试构建一个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的值设置为新创建的实例,但我不知道该怎么做。

还是我完全落后了?

P.S。我会将JODConverter视为后备,因为我尝试最小化我的依赖项。

1 个答案:

答案 0 :(得分:0)

我建议使用JODConverter(你的后备)因为你得到了你想要的东西以及何时/如果OpenOffice / LibreOffice对他们的DOC过滤器做了改进,你不必每次都安装/升级/测试你的宏。它也得到了很好的证明。