接下來要安裝 LiberOffice SDK ,坦白說,這個步驟我找好久,
下圖是下載的位置:
安裝完成之後,開啟 dotNet C# 專案,將 C:\Program files\LibreOffice 3.6\sdk\cli 中的 Dll 全部加進參考。
接下來就可以開始寫程式了:
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);
}
於是只要呼叫 Convert2Xls(ods檔案位置, xls輸出檔案位置) 就可以將 ods 轉成 xls 囉。
範例程式:將選到的 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

沒有留言 :
張貼留言