最近有針對Excel轉檔成OpenOffice的ODS格式進行處理,主要是使用JODConverter搭配
OpenOffice Service。在這邊就記錄一下在使用上的一些心得與注意的事項!
要使用JODConverter轉檔,除了現有的library外,還需搭配以下libs
commons-io-1.4.jar
jodconverter-2.2.2.jar
juh-3.0.1.jar
jurt-3.0.1.jar
ridl-3.0.1.jar
slf4j-api-1.5.6.jar
slf4j-jdk14-1.5.6.jar
unoil-3.0.1.jar
xstream-1.3.1.jar
另外,還需要啟用OpenOffice下的Service,在此使用的版本是4.4.1
在執行下面的指令時,建議可以將C:\Program Files (x86)\OpenOffice 4\program路徑加入
置環境變數內
啟用指令
終止指令 (for Windows)
基本範例如下:
1. 啟用OpenOffice Service
2. Java範例程式如下
範例很簡單,主要是透過DocumentConverter convert method將input file轉換成output file
API文件如下:
在這邊,我們使用的是第二個convert,無需指定轉前的格式及轉出的格式,因為lib內會呼叫
相關method來猜測您input file及output file的副檔名、mimetype等。
請看source code : AbstractOpenOfficeDocumentConverter.java
由圖一可以得知,最後程式還是會去呼叫帶四個參數的convert method,在inputFormat及
outputFormat的部分是帶入null
在圖二的部分,當inputFormat、outputFormat為null時,會去呼叫guessDocumentFormat
method,並將檔案帶入。此時,會利用副檔名取得預設已註冊的DocumentFormat,也就是
預先定義好,也可以說是有支援的(DefaultDocumentFormatRegistry.java)。
可以自己動手試試,如下
DefaultDocumentFormatRegistry formatReg = new DefaultDocumentFormatRegistry();
DocumentFormat xls = formatReg.getFormatByFileExtension("xls");
但是,如果您指定的副檔名沒有支援的話(odf),呼叫getFormatByFileExtension會得到null
如此一來,當在執行時,仍透過下面這個呼叫方式進行,
converter.convert(inputFile, null, outputFile, null);
但是在guessDocumentFormat就會出現Exception!!
因此當您input的檔案JODConverter沒有定義的話,可以自行new DocumentFormat,如odf格式
DocumentFormat odf = new DocumentFormat("OpenDocument Math", DocumentFamily.TEXT, "application/vnd.oasis.opendocument.formula", "odf");
總結
1. mimeType可以至官網查詢
2. 圖中的片段程式來自於該網站
3. 若inputFile格式JODConverter預設沒定義的話(如odf),可以自行定義DocumentFormat
4. 若xls轉換成ods後,要開啟檔案請先停用OpenOffice Service
OpenOffice Service。在這邊就記錄一下在使用上的一些心得與注意的事項!
要使用JODConverter轉檔,除了現有的library外,還需搭配以下libs
commons-io-1.4.jar
jodconverter-2.2.2.jar
juh-3.0.1.jar
jurt-3.0.1.jar
ridl-3.0.1.jar
slf4j-api-1.5.6.jar
slf4j-jdk14-1.5.6.jar
unoil-3.0.1.jar
xstream-1.3.1.jar
另外,還需要啟用OpenOffice下的Service,在此使用的版本是4.4.1
在執行下面的指令時,建議可以將C:\Program Files (x86)\OpenOffice 4\program路徑加入
置環境變數內
啟用指令
soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizard
終止指令 (for Windows)
tskill soffice
基本範例如下:
1. 啟用OpenOffice Service
2. Java範例程式如下
File inputFile = new File("TEST.xls");
File outputFile = new File("TEST.ods");
// connect to an OpenOffice.org instance running on port 8100
OpenOfficeConnection connection = new SocketOpenOfficeConnection(8100);
try {
connection.connect();
DocumentConverter converter = new OpenOfficeDocumentConverter(connection);
converter.convert(inputFile, outputFile);
} catch(Exception e) {
e.printStackTrace();
} finally {
if(connection.isConnected())connection.disconnect();
}
範例很簡單,主要是透過DocumentConverter convert method將input file轉換成output file
API文件如下:
void | convert(java.io.File inputFile, DocumentFormat inputFormat, java.io.File outputFile, DocumentFormat outputFormat) Convert a document. |
void | convert(java.io.File inputDocument, java.io.File outputDocument) Convert a document. |
void | convert(java.io.File inputDocument, java.io.File outputDocument, DocumentFormat outputFormat) Convert a document. |
void | convert(java.io.InputStream inputStream, DocumentFormat inputFormat, java.io.OutputStream outputStream, DocumentFormat outputFormat) Convert a document. |
在這邊,我們使用的是第二個convert,無需指定轉前的格式及轉出的格式,因為lib內會呼叫
相關method來猜測您input file及output file的副檔名、mimetype等。
請看source code : AbstractOpenOfficeDocumentConverter.java
圖一
由圖一可以得知,最後程式還是會去呼叫帶四個參數的convert method,在inputFormat及
outputFormat的部分是帶入null
圖二
method,並將檔案帶入。此時,會利用副檔名取得預設已註冊的DocumentFormat,也就是
預先定義好,也可以說是有支援的(DefaultDocumentFormatRegistry.java)。
可以自己動手試試,如下
DefaultDocumentFormatRegistry formatReg = new DefaultDocumentFormatRegistry();
DocumentFormat xls = formatReg.getFormatByFileExtension("xls");
但是,如果您指定的副檔名沒有支援的話(odf),呼叫getFormatByFileExtension會得到null
如此一來,當在執行時,仍透過下面這個呼叫方式進行,
converter.convert(inputFile, null, outputFile, null);
但是在guessDocumentFormat就會出現Exception!!
因此當您input的檔案JODConverter沒有定義的話,可以自行new DocumentFormat,如odf格式
DocumentFormat odf = new DocumentFormat("OpenDocument Math", DocumentFamily.TEXT, "application/vnd.oasis.opendocument.formula", "odf");
總結
1. mimeType可以至官網查詢
2. 圖中的片段程式來自於該網站
3. 若inputFile格式JODConverter預設沒定義的話(如odf),可以自行定義DocumentFormat
4. 若xls轉換成ods後,要開啟檔案請先停用OpenOffice Service
留言
張貼留言