Excel操作するには、「Microsoft.Office.Interop.Excel」を使ったCOM参照による方法が多いですが、Excel2003のサポートが切れたことでオープンソースのライブラリを使ってもいい環境になってきました。
「Microsoft.Office.Interop.Excel」を使った場合、Excelのインストールが必須だったりプロセス解放漏れのリスクなどのデメリットがあります。
オープンソースライブラリは下記3点が有力候補となります。
この中でお勧めは「EPPlus」となります。但し、xlsはサポート対象外です。
逆に「NPOI」は「xls」もサポートしているので、必要ならNPOIでも構いません。
SpreadsheetLightは、最近開発された。
EPPlusはVer.4系まではLGPLライセンス、Ver.5以上はライセンスが変更され商用利用は有償となった。
Ver.4系の最新版(2022/02/21時点 4.5.3.3)を使用する。
メリットとして、コードの書き方が直感的、グラフなどにも対応している。
デメリットとして、xlsはサポート対象外となっている。
コメント出力すると、可能な限り回復するようにというダイアログボックスが表示されてしまう場合
EPPLUS adding comment results error opening excel file - stackoverflow
AddCommentの第2引数(author)が空文字だと駄目なので、何か文字をセットする。
range.AddComment("no data", ""); ↓ range.AddComment("no data", "REF");
Excelファイルに出力する分には問題ないが、Excelファイルを読込みした際の数式は限定的である。
https://www.epplussoftware.com/de/Developers/FormulaCalc
Calculate()メソッド実行で、SUM(A2,A3)は正しく結果が出力されるが、1+1 や SUM(1,1)などは #VALUE になってしまう。
Trouble shooting/Logging でログを出力することができる。
https://github.com/EPPlusSoftware/EPPlus/wiki/Formula-Calculation
Javaで使われていたExcelファイル読み書き用ライブラリである「POI」を .NET に移植したものです。
POIの由来は、”Poor Obfuscation Implementation” (質の悪い難読な実装)の頭文字から来ているとの事で、Officeのファイル形式を調べた結果、非常に分かり難くなっていたことから、皮肉を込めて命名された。
ライセンスは Apache License 2.0 です。
NPOIは他のライブラリーと比較して、コードの書き方が少々難しく直感的ではありません。
(行のオブジェクトを作成し、その中の列の要素にデータを代入して・・・など)
メリットとしてExcel 2003 以前の形式(.xls)をサポートしている。他のオープンソースライブラリより比較的処理が速い。長年の実績があるため、枯れたライブラリと言えるでしょう。
ClosedXMLは使いにくいと評されるMicrosoft Open XML Format SDKをラップし使い易くしたもの。MicrosoftがOpen XMLなので、Closed XML と名づけられました。
ライセンスは MIT License です。
メリットとして、コードの書き方が直感的となっている。
デメリットとして、xlsはサポート対象外となっている。グラフの生成機能がない。