サーバーサイドでEXCELを読み込む(NPOI、EPPlus)
サーバーサイドでEXCELを開いて中身を読み込みたい。
今まではデータ接続コンポーネントを使って開いてたんだけど、ダウンロードページをよく読むと、
2007 Office system ドライバは、以下の目的には使用できません。
サーバー側アプリケーション内での Jet OLEDB プロバイダとしての使用。
Web アプリケーションのようなサーバー側シナリオで、Office ファイルの読み書きをする場合は、Open XML を使用する必要があります。
Office system ドライバは、以下を含む特定のシナリオ下でのみ、使用がサポートされています。
Microsoft Office Access、Microsoft Office Excel、およびテキスト ファイルを含む各種ファイル形式の読み書きを行うデスクトップ アプリケーション。
おっと。。。実装方法変更。
最初に思いついたのはNPOIだったんだけど、2007形式以降を対応していないことが判明。
で、他の案をググってたら、EPPlusなるものを知る。
ココのサイトが比較表もあり、分かりやすいです。
NPOIはOpenXML対応はver.1.3からか。
EPPlusで、EXCELの中身を表示するコード書いてみたらいけそう。
ライセンスはLGPLです。
NPOIの場合。
Imports System.IO Imports NPOI.HSSF.UserModel Module Module1 Sub Main() Dim filePath As String = "C:\Book1.xls" Using fs As New FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.Read) Dim book As HSSFWorkbook Dim sheet As HSSFSheet Dim row As HSSFRow Dim cell As HSSFCell book = New HSSFWorkbook(fs) sheet = DirectCast(book.GetSheetAt(0), HSSFSheet) Diagnostics.Debug.WriteLine("----- Start XLS-----") For i = 0 To sheet.LastRowNum Diagnostics.Debug.WriteLine("--- " & i + 1 & "行目") row = DirectCast(sheet.GetRow(i), HSSFRow) For Each cell In row.Cells Diagnostics.Debug.WriteLine(cell.ToString) Next Next Diagnostics.Debug.WriteLine("----- End -----") End Using End Sub End Module
EPPlusの場合。
Imports OfficeOpenXml Imports System.IO Module Module1 Sub Main() Dim filePathAs String = "C:\Book1.xlsx" Dim existingFile = New FileInfo(filePath) Using package As New ExcelPackage(existingFile) Dim worksheet As ExcelWorksheet = package.Workbook.Worksheets(1) Diagnostics.Debug.WriteLine("----- Start XLSX-----") For i = 1 To worksheet.Dimension.End.Row Diagnostics.Debug.WriteLine("--- " & i & "行目") For j = 1 To worksheet.Dimension.End.Column Diagnostics.Debug.WriteLine(worksheet.Cells(i, j).Value) Next Next Diagnostics.Debug.WriteLine("----- End -----") End Using End Sub End Module
注意点としては
NPOIは*.xlsはOKだけど、*.xlsxは読み込めない。
EPPlusは*.xlsxはOKだけど、*.xlsは読み込めない。
出来れば一つのライブラリで解決したいのだが。。