Ubuntu: Converta o OpenOffice Calc para pasta de trabalho do Excel usando o CLI

3

Eu preciso criar um relatório automatizado em formato de planilha. Infelizmente, Parece haver uma maneira fácil de criar esses relatórios usando o OpenOffice Calc , mas os gerentes superiores os querem no formato MS Excel.

Como esses relatórios devem ser criados e enviados por e-mail automaticamente, existe uma forma de linha de comando agradável para converter entre esses formatos de arquivo?

    
por Adam Matan 01.03.2010 / 16:04

1 resposta

5

Sim, existe uma maneira de linha de comando para converter entre esses formatos de arquivo. Mas uma macro deve primeiro ser instalada no OpenOffice. Essa macro levará um nome de arquivo do OpenOffice especificado a linha de comando e crie um arquivo do Microsoft Excel (.xls) com o mesmo nome, exceto para a extensão do arquivo.

Eu testei isso com o OpenOffice 3.2 no Windows, mas espero que funcione no Ubuntu e no OpenOffice 1.1 ou posterior.

O programa a ser usado na linha de comando é soffice . No Windows, ele não está no caminho e o caminho absoluto deve ser usado ou o diretório atual deve estar lá.

Exemplo de linha de comando do Ubuntu (não testada) que converte uma planilha do OpenOffice arquivo em /home/mortense/temp9/test2.ods para o formato do Excel, /home/mortense/temp9/test2.xls :

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

Exemplo de linha de comando do Windows usada durante o teste que converte um arquivo de planilha do OpenOffice em D:\temp9\test2.ods para o formato do Excel, D:\temp9\test2.xls :

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

A macro está listada abaixo. Aqui estão as instruções de instalação:

  1. Inicie o OpenOffice Calc .

  2. Copie o código no final desta resposta para a área de transferência. Crie uma macro: menu Ferramentas / Macros / Organizar macros / OpenOffice.org Basic /. Em seguida, expanda para "Minhas Macros / Padrão /" para que "Padrão" seja selecionado. Pressione o botão "Novo".

  3. Clique com o botão direito na aba no canto inferior esquerdo e selecione: Insert / BASIC Module. Clique com o botão direito do mouse no módulo criado, selecione "Renomear" e digite "doConvertToExcel". Clique na área de edição (para definir o foco lá), selecione all ( Ctrl + A ) e cole no código. Feche a janela (por exemplo, com Ctrl + W ). É isso!

O código da macro:

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
    
por 06.03.2010 / 22:13