ユーザ用ツール

サイト用ツール


it技術:excel操作

Excel操作

はじめに

Excel操作するには、「Microsoft.Office.Interop.Excel」を使ったCOM参照による方法が多いですが、Excel2003のサポートが切れたことでオープンソースのライブラリを使ってもいい環境になってきました。
「Microsoft.Office.Interop.Excel」を使った場合、Excelのインストールが必須だったりプロセス解放漏れのリスクなどのデメリットがあります。

参考:Excelファイルを C# と VB.NET で読み込む "正しい" 方法

オープンソースライブラリ

オープンソースライブラリは下記3点が有力候補となります。

  • EPPlus
  • NPOI
  • ClosedXML
  • Spire.XLS
  • SpreadsheetLight

この中でお勧めは「EPPlus」となります。但し、xlsはサポート対象外です。
逆に「NPOI」は「xls」もサポートしているので、必要ならNPOIでも構いません。
SpreadsheetLightは、最近開発された。

EPPlus

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

  • ローカライズされた関数名は使用しないでください。英語の名前 (SUM、IF、VLOOKUP など) のみがサポートされています。
  • 関数の引数間の区切り文字としてセミコロンを使用しないでください。コンマのみがサポートされています。
  • 数式の先頭に = 記号を追加しないでください。“=SUM(A1:A2)” は間違っており、“SUM(A1:A2)” は正しいです。

NPOI

Javaで使われていたExcelファイル読み書き用ライブラリである「POI」を .NET に移植したものです。
POIの由来は、”Poor Obfuscation Implementation” (質の悪い難読な実装)の頭文字から来ているとの事で、Officeのファイル形式を調べた結果、非常に分かり難くなっていたことから、皮肉を込めて命名された。
ライセンスは Apache License 2.0 です。

NPOIは他のライブラリーと比較して、コードの書き方が少々難しく直感的ではありません。
(行のオブジェクトを作成し、その中の列の要素にデータを代入して・・・など)

メリットとしてExcel 2003 以前の形式(.xls)をサポートしている。他のオープンソースライブラリより比較的処理が速い。長年の実績があるため、枯れたライブラリと言えるでしょう。

ClosedXML

ClosedXMLは使いにくいと評されるMicrosoft Open XML Format SDKをラップし使い易くしたもの。MicrosoftがOpen XMLなので、Closed XML と名づけられました。
ライセンスは MIT License です。

メリットとして、コードの書き方が直感的となっている。
デメリットとして、xlsはサポート対象外となっている。グラフの生成機能がない。

参照

it技術/excel操作.txt · 最終更新: 2023/10/17 18:18 by yajuadmin