우분투 : CLI를 사용하여 OpenOffice Calc를 Excel 통합 문서로 변환 형식으로 자동

스프레드 시트 형식으로 자동 보고서를 작성해야합니다. 불행히도 OpenOffice Calc를 사용하여 이러한 보고서를 작성하는 쉬운 방법이 있지만 상급 관리자는 MS Excel 형식으로 보고서를 원합니다.

이러한 보고서가 자동으로 작성되고 이메일로 전송되므로 이러한 파일 형식간에 변환 할 수있는 멋진 명령 행 방법이 있습니까?



답변

예, 이러한 파일 형식간에 변환하는 명령 줄 방법이 있습니다. 그러나 먼저 매크로를 OpenOffice에 설치해야합니다. 이 매크로는 명령 줄에서 지정된 OpenOffice 파일 이름을 가져와 파일 확장자를 제외하고 동일한 이름으로 Microsoft Excel 파일 (.xls)을 만듭니다.

Windows에서 OpenOffice 3.2로 이것을 테스트했지만 Ubuntu 및 OpenOffice 1.1 이상에서 작동 할 것으로 기대합니다.

명령 행에서 사용할 프로그램은 soffice입니다. Windows에서는 경로에 없으며 절대 경로를 사용해야하거나 현재 디렉토리가 있어야합니다.

OpenOffice 스프레드 시트 파일 /home/mortense/temp9/test2.ods을 Excel 형식으로 변환하는 샘플 Ubuntu 명령 줄 (예상치 않음) /home/mortense/temp9/test2.xls:

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

테스트 중에 OpenOffice 스프레드 시트 파일 D:\temp9\test2.ods을 Excel 형식으로 변환하는 샘플 Windows 명령 줄 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 기본 /. 그런 다음 “표준”이 선택되도록 “내 매크로 / 표준 /”으로 확장하십시오. “새로 만들기”버튼을 누르십시오.

  3. 왼쪽 하단의 탭을 마우스 오른쪽 버튼으로 클릭하고 Insert / BASIC Module을 선택하십시오. 작성된 모듈을 마우스 오른쪽 단추로 클릭하고 “이름 바꾸기”를 선택하고 “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