前言:
.NET中常見讀取Excel的元件有:
● Microsoft.Office.Interop.Excel
● NPOI
● EPPlus
● ClosedXML
但Interop.Excel在使用上,問題比較多,如多執行緒時,會出現檔案鎖定等問題,
至於EPPlus跟ClosedXML只能處理xlsx格式,所以就拿NPOI來試試了,
而且NPOI可以商業用,只要掛上copyright與license notice即可(Apache License 2.0)。
作法:
初次使用NPOI,發現不同Excel格式有不同類別處理,如:
● HSSFWorkbook用來處理xls
● XSSFWorkbook用來處理xlsx
但這樣不就要先判斷附檔名,再用不同類別處理?
似乎不夠漂亮!?
後來找到NPOI提供WorkbookFactory類別,提供IWorkbook抽象,
只要呼叫WorkbookFactory.Create方法,即可依Excel格式回傳該Workbook。
不過在WorkbookFactory.Create(string file)實作方法裡,
竟然是先用HSSFWorkbook開看看,開不起來再用XSSFWorkbook開,
沒問題就回傳,出乎我意料之外...
後來想到,如果只是讀取Excel,用LinqToExcel就可以了,
使用LinqToExcel讀取Excel非常方便,並可代入自訂物件結構,使用強型別處理資料。
但記得要安裝Microsoft Access Database Engine 2010 Redistributable,
以免出現The 'Microsoft.ACE.OLEDB.12.0' provider is not registered on the local machine.'例外。
參考資料:
https://github.com/tonyqus/npoi
https://github.com/paulyoder/LinqToExcel
沒有留言:
張貼留言