遇到需求是要將報表轉檔成ODS格式,但原本的報表套件沒支援OpenDocument,所以找了一些解法......
因為報表套件沒辦法直接輸出 OpenDocument 檔案,所以打算先輸出 Excel,再將 Excel 檔轉成 ODS 檔案,所以下的關鍵字都是以 Excel 轉 ODS 為主。
客戶 / 公司有錢或資料量不大的選擇:
- Spire.XLS for .NET
看到最多文章推薦的套件。
免費版限制:一次可存取 5 張工作表和每張表 200 列的資料
- Gembox.Spreadsheet
免費版限制:一次可存取 5 張工作表和每張表 150 列的資料
- Aspose.Cells
免費版限制:會多產生一頁試用警告的工作表
以上三個套件都可以從 NuGet 安裝,而且我覺得說明文件也寫得很清楚,至少我都有用這幾套成功寫出 DEMO。
樣式的接近度我個人認為是 3>2>1,但差異不大,基本上都很接近原檔了。
如果不想花大錢買現成套件,可以考慮下面的選擇。
- Microsoft.Office.Interop.Excel
伺服器可以安裝 Office 的話,可以考慮這個解法,更好的辦法是叫客戶直接開 Excel 另存新檔。
不過 Interop 沒支援開啟 Stream的方法(畢竟只是呼叫 Excel 軟體幫我們做事),
所以必須先將報表輸出成 Excel 存在本機,再把它讀取出來,轉成 ODS 檔。
詳細寫法可參考:https://blackcatj.blogspot.com/2017/04/caspnet-office-pdfodf.html
優點:樣式與原檔最接近
缺點:需要頻繁使用輸出 ODS 功能的話,要考慮這些暫存 Excel 的問題 (儲存位置、檔名、刪除時機......)
- 雙手萬能
沒免費套件能用,何不自己寫?
網路上查到最多資料都是提到這篇文章 How to Read and Write ODF/ODS Files
他的做法是拿一張空白的 ODS 檔當範本,然後把資料的部分替換掉。
所以這個做法最大的問題就是..... 你拉得漂漂亮亮的表格樣式全部都毀了
◢▆▅▄▃_崩╰(〒皿〒)╯潰_▃▄▅▆◣
我沒有找到 Office Open XML 和 OpenDocument 樣式的轉換方式或相關對應文件,所以只能停在這邊。
如果有人有相關資訊,歡迎提供給我!
優點:免費!愛怎麼客製就怎麼客製
缺點:樣式不會轉過來