Найдено на: http://www.i-rs.ru/article/articleprint/67/-1/35/ |
Переход к OpenOffice: пакетное преобразование существующих документов |
|
Если вы собираетесь преобразовывать ваши файлы в новый формат по одному, то вам придётся открыть и заполнить несколько диалоговых окон для каждого файла. Если вам требуется преобразовать несколько сотен файлов, то такой подход окажется затруднительным. Что же делать, если у вас есть большая куча документов Word, таблиц Excel и презентаций PowerPoint, и вам нужно загрузить XML-версии всех файлов в одну базу данных, которая поддерживала бы запросы к содержимому этих XML-документов? Например, если вы — это штат Массачусетс или фирма IBM?
Как и в продукте фирмы Microsoft, в OpenOffice есть макроязык. При запуске OpenOffice из командной строки Linux или Windows можно указывать, чтобы выполнился определённый макрос. Можно даже передать этому макросу в качестве параметра имя файла. Далее, если использовать ключ -invisible при запуске OpenOffice из командной строки, то его графический интерфейс (GUI) не будет отображаться. А если задействовать обе этих возможности вместе, то получится командная строка, которая преобразует файл Microsoft Office в файл OpenOffice (или в файл Acrobat) безо всякого GUI. Теперь, чтобы преобразовать сотню файлов, достаточно простого скрипта (например, на языке Perl), чтобы создать пакетный файл либо шелл-скрипт из сотни команд, каждая из которых преобразует один файл.
(Замечание: макросы, который вдохновили меня на создание этой статьи, явно были написаны для OpenOffice 1. x, — но тот макрос, который я из них собрал, был протестирован мной в OpenOffice 2.0 в Windows и в Linux.)
|
' За основу взят код с
http://www.oooforum.org/forum/viewtopic.phtml?t=3772
' Сохранить документ в формате Acrobat PDF.
Sub SaveAsPDF( cFile )
cURL = ConvertToURL( cFile )
' Открыть документ. Мы предполагаем, что тип документа
' будет корректно распознан, и поэтому не указываем
' конкретный фильтр импорта.
oDoc = StarDesktop.loadComponentFromURL( cURL, "_blank", 0, _
Array(MakePropertyValue( "Hidden", True ),))
cFile = Left( cFile, Len( cFile ) - 4 ) + ".pdf"
cURL = ConvertToURL( cFile )
' Сохранить документ, используя фильтр экспорта.
oDoc.storeToURL( cURL, Array(_
MakePropertyValue( "FilterName", "writer_pdf_Export"
),)
oDoc.close( True )
End Sub
' Сохранить документ в формате Microsoft Word.
Sub SaveAsDoc( cFile )
' практически совпадает с SaveAsPDF
cURL = ConvertToURL( cFile )
oDoc = StarDesktop.loadComponentFromURL( cURL, "_blank", 0, (_
Array(MakePropertyValue( "Hidden", True ),))
cFile = Left( cFile, Len( cFile ) - 4 ) + ".doc"
cURL = ConvertToURL( cFile )
oDoc.storeToURL( cURL, Array(_
MakePropertyValue( "FilterName", "MS WinWord 6.0" ),)
oDoc.close( True )
End Sub
' Сохранить документ в формате OpenOffice 2.
Sub SaveAsOOO( cFile )
' практически совпадает с SaveAsPDF
cURL = ConvertToURL( cFile )
oDoc = StarDesktop.loadComponentFromURL( cURL, "_blank", 0, _
Array(MakePropertyValue( "Hidden", True ),))
' Расширение нового файла выбирается на основании расширения
' исходного файла, переведённого в нижний регистр.
Select Case LCase(Right(cFile,3))
Case "ppt" ' PowerPoint file.
cFileExt = "odp"
Case "doc" ' Word file.
cFileExt = "odt"
Case "xls" ' Excel file.
cFileExt = "ods"
Case Else
cFileExt = "xxx"
End Select
cFile = Left( cFile, Len( cFile ) - 3 ) + cFileExt
cURL = ConvertToURL( cFile )
oDoc.storeAsURL( cURL, Array() )
oDoc.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
|
"C:\Program Files\OpenOffice.org 2.0\program\soffice" -invisible macro:///Standard.MyConversions.SaveAsOOO(c:\temp\sample.doc) |
ooffice2 -invisible "macro:///Standard.MyConversions.SaveAsOOO(/home/bob/temp/sample.doc)" |
# Не забудьте: $1 должен содержать имя файла # с полным путём, но без расширения ooffice2 -invisible "macro:///Standard.MyConversions.SaveAsOOO($1.doc)" unzip -o $1.odt content.xml cp content.xml $1.xml |
REM Не забудьте: %1 должен содержать имя файла REM с полным путём, но без расширения set OooExe="C:\Program Files\OpenOffice.org 2.0\program\soffice" %OOOExe% -invisible macro:///Standard.MyConversions.SaveAsOOO(%1.doc) unzip -o %1.odt content.xml copy content.xml %1.xml |
|
|
Сайт:
XML.com Copyright © 1998-2006 O'Reilly Media, Inc.Автор перевода:
А.СкробовПодробнее:
Bob DuCharmeДата создания: