3

Мне нужно создать автоматический отчет в формате электронной таблицы. К сожалению, кажется, что существует простой способ создания этих отчетов с использованием OpenOffice Calc, но высшее руководство хочет, чтобы они были в формате MS Excel.

Поскольку эти отчеты должны создаваться и отправляться по электронной почте автоматически, есть ли хороший способ командной строки для преобразования между этими форматами файлов?

1 ответ1

5

Да, есть способ командной строки для преобразования между этими форматами файлов. Но макрос должен быть сначала установлен в OpenOffice. Этот макрос берет указанное имя файла OpenOffice из командной строки и создает файл Microsoft Excel (.xls) с тем же именем, за исключением расширения файла.

Я протестировал это с OpenOffice 3.2 на Windows, но я ожидаю, что он будет работать на Ubuntu и с OpenOffice 1.1 или более поздней.

Программа для использования в командной строке - soffice . В Windows это не по пути, и должен использоваться абсолютный путь, или текущий каталог должен быть там.

Пример командной строки Ubuntu (непроверенной), которая преобразует файл электронной таблицы OpenOffice в /home/mortense/temp9/test2.ods в формат Excel, /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 Calc.

  2. Скопируйте код в конце этого ответа в буфер обмена. Создайте макрос: меню Инструменты / Макросы / Упорядочить макросы / OpenOffice.org Basic /. Затем разверните «Мои макросы / Стандарт /», чтобы выбрать "Стандарт". Нажмите кнопку "Новый".

  3. Щелкните правой кнопкой мыши вкладку в левом нижнем углу и выберите «Вставить / ОСНОВНОЙ модуль». Щелкните правой кнопкой мыши на созданном модуле, выберите "Переименовать" и введите "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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .