Ubuntu:使用 CLI 将 OpenOffice Calc 转换为 Excel 工作簿

Ubuntu:使用 CLI 将 OpenOffice Calc 转换为 Excel 工作簿

我需要以电子表格格式创建自动报告。不幸的是,使用 OpenOffice Calc 似乎可以轻松创建这些报告,但高层管理人员希望采用 MS Excel 格式。

由于这些报告将被自动创建并通过电子邮件发送,是否有一种好的命令行方式来在这些文件格式之间进行转换?

答案1

是的,有一种命令行方法可以在这些文件格式之间进行转换。但必须先在 OpenOffice 中安装一个宏。此宏将从命令行获取指定的 OpenOffice 文件名,并创建一个名称相同(文件扩展名不同)的 Microsoft Excel 文件 (.xls)。

我已经在 Windows 上使用 OpenOffice 3.2 进行了测试,但我希望它能够在 Ubuntu 和 OpenOffice 1.1 或更高版本上运行。

命令行上使用的程序是soffice。在 Windows 上,它不在路径上,必须使用绝对路径或当前目录。

/home/mortense/temp9/test2.ods将 OpenOffice 电子表格文件转换为 Excel 格式的Ubuntu 命令行示例(未经测试)/home/mortense/temp9/test2.xls

"/usr/lib/openoffice/program/soffice" "macro:///Standard.doConvertToExcel.doConvertToExcel(/home/mortense/temp9/test2.ods)"

测试期间使用的 Windows 命令行示例将 OpenOffice 电子表格文件转换D:\temp9\test2.ods为 Excel 格式D:\temp9\test2.xls

"D:\Program Files (x86)\OpenOffice32\OpenOffice.org 3\program\soffice.exe" "macro:///Standard.doConvertToExcel.doConvertToExcel(D:/temp9/test2.ods)"

宏如下所示。以下是安装说明:

  1. 启动 OpenOffice计算

  2. 将此答案末尾的代码复制到剪贴板。创建宏:菜单工具/宏/组织宏/OpenOffice.org Basic/。然后展开到“我的宏/标准/”,以便选择“标准”。按下“新建”按钮。

  3. 右键点击左下角的选项卡并选择:插入/BASIC 模块。右键点击创建的模块,选择“重命名”并输入“doConvertToExcel”。点击编辑区域(将焦点设置在那里),选择全部(Ctrl+ A)并粘贴代码。关闭窗口(例如使用Ctrl+ W)。就是这样!


宏的代码:

Sub doConvertToExcel( aFile )
   URL = ConvertToURL( aFile )

   ' Open the document.
   ' Just blindly assume that the document is of a type that OOo will
   '  correctly recognize and open -- without specifying an import filter.
   doc = StarDesktop.loadComponentFromURL( URL, "_blank", 0, Array(_
            MakePropertyValue( "Hidden", True ),_
            ) )

   outFile = Left( aFile, Len( aFile ) - 4 ) + ".xls"

   outURL = ConvertToURL( outFile)

   ' List of filters: <http://www.oooforum.org/forum/viewtopic.phtml?t=3549> and
   '                  <http://wiki.services.openoffice.org/wiki/Documentation/DevGuide/Spreadsheets/Filter_Options>.
   '
   ' Save the document using a filter.
   doc.storeToURL( outURL, Array(_
                              MakePropertyValue( "FilterName", "MS Excel 97" ),_
                 )

   doc.close( True )
End Sub


Function MakePropertyValue( Optional cName As String, Optional uValue ) As com.sun.star.beans.PropertyValue
   Dim oPropertyValue As New com.sun.star.beans.PropertyValue
   If Not IsMissing( cName ) Then
      oPropertyValue.Name = cName
   EndIf
   If Not IsMissing( uValue ) Then
      oPropertyValue.Value = uValue
   EndIf
   MakePropertyValue() = oPropertyValue
End Function

相关内容