C#からExcel操作方法のメモ
| ライブラリ | .xls | .xlsx | 読み | 書き | ライセンス | 
|---|---|---|---|---|---|
| ClosedXML | × | 〇 | 〇 | 〇 | MIT | 
| ExcelDataReader | 〇 | 〇 | 〇 | × | MIT | 
| NPOI | 〇 | 〇 | 〇 | 〇 | Apache 2.0 | 
| EPPlus | × | 〇 | 〇 | 〇 | Polyform Noncommercial License 1.0.0 | 
ClosedXML、ExcelDataReader、EPPlus、NPOIのドキュメント・チュートリアル
Excel(COM)、ClosedXML、ExcelDataReader、NPOI、EPPlusを使えるようにする
早見表
| 項目 | Excel(COM) | ClosedXML | EPPlus | ExcelDataReader | NPOI | 
|---|---|---|---|---|---|
| ファイルパスオープン | 〇 | 〇 | 〇 | × | × | 
| FileInfoオープン | × | × | 〇 | × | × | 
| FileStreamオープン | × | 〇 | 〇 | 〇 | 〇 | 
| 行列番号 | 1~ | 1~ | 1~ | 0~ | 0~ | 
| シート番号 | 1~ | 1~ | 0~ | 0~ | 0~ | 
| シート取得 | Sheets変数[ ] | Worksheet() | Worksheets() | - | GetSheetAt()/GetSheet() | 
| 存在しないシート | 例外 | 例外 | null | null | null | 
ワークブック
| 処理 | Excel(COM) | ClosedXML | EPPlus | ExcelDataReader | NPOI | 
|---|---|---|---|---|---|
| ブックを作成 | 〇 | 〇 | 〇 | × | 〇 | 
| ブックを開く | 〇 | 〇 | 〇 | 〇 | 〇 | 
| ブックを開く(読み取り専用) | 〇 | 〇 | 〇 | 〇 | 〇 | 
| ブックを開く(書き込みパスワード付き) | 〇 | × | × | × | × | 
| ブックを開く(開くパスワード付き) | 〇 | × | × | × | × | 
| ブックを保存(名前をつけて保存) | 〇 | 〇 | 〇 | × | 〇 | 
| 上書き保存 | 〇 | 〇 | 〇 | × | 〇 | 
ワークシート
| 処理 | Excel(COM) | ClosedXML | EPPlus | ExcelDataReader | NPOI | 
|---|---|---|---|---|---|
| シートの数を取得する | 〇 | 〇 | 〇 | 〇 | 〇 | 
| 全てのシートを取得しその名前を出力する | 〇 | 〇 | 〇 | 〇 | 〇 | 
| シート名を変更 | 〇 | 〇 | 〇 | × | 〇 | 
| シートを追加する(一番最後) | 〇 | 〇 | 〇 | × | 〇 | 
| シートの削除 | 〇 | 〇 | 〇 | × | 〇 | 
| ワークシートの参照 | 〇 | 〇 | 〇 | 〇 | 〇 | 
| アクティブなシートを取得/設定 | 〇 | 〇 | 〇 | × | 〇 | 
| 表示倍率の取得 | 〇 | 〇 | 〇 | × | × | 
| 表示倍率の設定 | 〇 | 〇 | 〇 | × | 〇 | 
| シートの保護 | 〇 | 〇 | 〇 | × | 〇 | 
| シートの解除 | 〇 | 〇 | 〇 | × | △ | 
(補足)シートの解除は、NPOIだとパス無し保護は解除できても、パス有り保護は解除できなさそう
セル
| 処理 | Excel(COM) | ClosedXML | EPPlus | ExcelDataReader | NPOI | 
|---|---|---|---|---|---|
| A1形式でセルの値取得 | 〇 | 〇 | 〇 | × | × | 
| R1C1形式でセルの値取得 | 〇 | 〇 | 〇 | 〇 | 〇 | 
| 複数のセルを範囲で取得し、1つずつ取り出し値を出力 | 〇 | 〇 | 〇 | 〇 | 〇 | 
| セルのアドレス | 〇 | 〇 | 〇 | × | × | 
| セルに値を設定する | 〇 | 〇 | 〇 | × | 〇 | 
参考
ClosedXML, ExcelDataReader, EPPlus, NPOIがパスワード解除について
Officeのサーバー上でのCOM経由による自動操作について