コードを実行するマシンに Excel をインストールせずに、C# で Excel スプレッドシートを作成するにはどうすればよいですか?
ベストアンサー1
ExcelLibrary というライブラリを使用できます。これは、Google Code に投稿された無料のオープンソース ライブラリです。
これは、上で言及した PHP ExcelWriter の移植版のようです。まだ新しい .xlsx 形式には書き込めませんが、その機能を追加する作業が進められています。
非常にシンプルで、小さく、使いやすいです。さらに、DataSet と DataTables を使用して Excel データを簡単に操作できる DataSetHelper も備えています。
ExcelLibrary はまだ古い Excel 形式 (.xls ファイル) でのみ機能するようです。ただし、将来的には新しい 2007/2010 形式のサポートが追加される可能性があります。
使用することもできますEPプラスこれはExcel 2007/2010形式のファイル(.xlsxファイル)にのみ機能します。NPOIどちらでも機能します。
コメントに記載されているように、各ライブラリにはいくつかの既知のバグがあります。全体として、時間の経過とともに EPPlus が最良の選択であるように思われます。より積極的に更新され、ドキュメント化もされているようです。
また、@АртёмЦарионовが以下で指摘しているように、EPPlusはピボットテーブルをサポートしており、ExcelLibraryもある程度サポートしている可能性があります(ExcelLibrary のピボット テーブルの問題)
簡単に参照できるリンクをいくつか示します。
Excelライブラリ-GNU 劣等 GPL
EPプラス-GNU (LGPL) - メンテナンス終了
EPプラス5-Polyform 非営利 - 2020 年 5 月開始
NPOI-Apacheライセンス
ExcelLibrary のサンプルコードを以下に示します。
以下は、データベースからデータを取得し、そこからワークブックを作成する例です。ExcelLibrary コードは下部の 1 行であることに注意してください。
//Create the data set and table
DataSet ds = new DataSet("New_DataSet");
DataTable dt = new DataTable("New_DataTable");
//Set the locale for each
ds.Locale = System.Threading.Thread.CurrentThread.CurrentCulture;
dt.Locale = System.Threading.Thread.CurrentThread.CurrentCulture;
//Open a DB connection (in this example with OleDB)
OleDbConnection con = new OleDbConnection(dbConnectionString);
con.Open();
//Create a query and fill the data table with the data from the DB
string sql = "SELECT Whatever FROM MyDBTable;";
OleDbCommand cmd = new OleDbCommand(sql, con);
OleDbDataAdapter adptr = new OleDbDataAdapter();
adptr.SelectCommand = cmd;
adptr.Fill(dt);
con.Close();
//Add the table to the data set
ds.Tables.Add(dt);
//Here's the easy part. Create the Excel worksheet from the data set
ExcelLibrary.DataSetHelper.CreateWorkbook("MyExcelFile.xls", ds);
Excel ファイルの作成は、このように簡単です。Excel ファイルを手動で作成することもできますが、上記の機能には本当に感心しました。