1. ホーム
  2. c#

[解決済み] Microsoft Officeをインストールせずに、C#でExcel(.XLSおよび.XLSX)ファイルを作成するにはどうすればよいですか?

2022-03-14 23:50:42

質問内容

C#でExcelのスプレッドシートを作成する場合、コードを実行するマシンにExcelがインストールされている必要がありますが、どうすればよいでしょうか。

どのように解決するのですか?

ExcelLibraryというライブラリを使用することができます。これはGoogle Codeに掲載されている無料のオープンソースライブラリです。

エクセルライブラリ

これは、上記で紹介したPHPのExcelWriterを移植したもののようです。まだ新しい .xlsx フォーマットには書き込めませんが、その機能を追加する作業を行っているようです。

とてもシンプルで、小さくて使いやすいですね。さらに、DataSetHelperがあるので、DataSetsやDataTablesを使って簡単にExcelのデータを扱うことができます。

ExcelLibraryはまだ古いExcel形式(.xlsファイル)にしか対応していないようですが、将来的には新しい2007/2010形式にも対応するようになるかもしれません。

を使用することもできます。 EPPlus これは、Excel 2007/2010形式のファイル(.xlsxファイル)に対してのみ機能します。また 特定非営利活動法人 というように、両方に対応しています。

各ライブラリには、コメントにあるように、いくつかの既知のバグがあります。全体として、時間が経つにつれてEPPlusが最良の選択であるように思われます。EPPlusはより活発に更新され、文書化されているようです。

また、下記の@АртёмЦарионовさんが指摘されているように、EPPlusはピボットテーブルをサポートしており、ExcelLibraryは何らかのサポートがあるかもしれません( ExcelLibraryにおけるピボットテーブルの問題 )

以下は、クイックリファレンスのためのいくつかのリンクです。
エクセルライブラリ - GNU劣等GPL
EPPlus - GNU (LGPL) - メンテナンス終了
EPPlus 5 - Polyform Noncommercial - 2020年5月開始予定
非営利組織(NPO - Apacheライセンス

ExcelLibraryのサンプルコードです。

以下は、データベースからデータを取得し、そこからワークブックを作成する例です。ExcelLibraryのコードは一番下の一行であることに注意してください。

//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ファイルを作成することも可能ですが、私が感動したのは上記の機能です。