接下來要安裝 LiberOffice SDK ,坦白說,這個步驟我找好久,
下圖是下載的位置:
安裝完成之後,開啟 dotNet C# 專案,將 C:\Program files\LibreOffice 3.6\sdk\cli 中的 Dll 全部加進參考。
接下來就可以開始寫程式了:
於是只要呼叫 Convert2Xls(ods檔案位置, xls輸出檔案位置) 就可以將 ods 轉成 xls 囉。public static string FilePath2Url(string fname) { return string.Format("file:///{0}", fname.Replace("\\", "/")); } internal static XComponent openCalcSheet(string fname) { string url = FilePath2Url(fname); XComponentContext oStrap = uno.util.Bootstrap.bootstrap(); XMultiServiceFactory oServMan = (XMultiServiceFactory)oStrap.getServiceManager(); XComponentLoader desktop = (XComponentLoader)oServMan.createInstance("com.sun.star.frame.Desktop"); PropertyValue[] loadProps = new PropertyValue[1]; loadProps[0] = new PropertyValue(); loadProps[0].Name = "Hidden"; loadProps[0].Value = new uno.Any(true); XComponent document = desktop.loadComponentFromURL(url, "_blank", 0, loadProps); return document; } public static XSpreadsheetDocument Open(string fname) { return (XSpreadsheetDocument)openCalcSheet(fname); } public static void Save(XSpreadsheetDocument xDoc, string fname) { string url = FilePath2Url(fname); PropertyValue[] propVals = new PropertyValue[2]; /* 另存成 MS Excel 97 的格式, 格式可以參考:http://www.oooforum.org/forum/viewtopic.phtml?t=3549 (找不到官方的清單 Orz,看官知道在哪的,請通知一聲,感恩ㄚ) 原理可以參考:http://wiki.openoffice.org/wiki/Documentation/DevGuide/OfficeDev/Integrating_Import_and_Export_Filters */ propVals[0] = new PropertyValue { Name = "FilterName", Value = new uno.Any("MS Excel 97") }; propVals[1] = new PropertyValue { Name = "Overwrite", Value = new uno.Any(true) }; ((XStorable)xDoc).storeToURL(url, propVals); } public static void Convert2Xls(string fname, string new_fname) { Save(Open(fname), new_fname); }
範例程式:將選到的 ODS 另存成 XLS 並透過 oledb 讀取資料顯示在 DataGridView 上
參考資料:
.http://www.oooforum.org/forum/viewtopic.phtml?t=3549
.Integrating Import and Export Filters
.use openoffice uno cli with c sharp to create a spreadsheet
.c-cpp.r3dcode.com
沒有留言 :
張貼留言