[解決済み] Microsoft Officeをインストールせずに、C#でExcel(.XLSおよび.XLSX)ファイルを作成するにはどうすればよいですか?
質問内容
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ファイルを作成することも可能ですが、私が感動したのは上記の機能です。
関連
-
[解決済み] 他のスレッドからGUIを更新するにはどうすればよいですか?
-
[解決済み] enumを列挙するには
-
[解決済み] Git リポジトリで削除されたファイルを検索して復元する方法
-
[解決済み] ディープクローンオブジェクト
-
[解決済み] C#で文字列のエンコーディングを手動で指定せずに、一貫性のあるバイト表現を得るには?
-
[解決済み] ファイルの内容からJavaの文字列を作成するにはどうすればよいですか?
-
[解決済み] Try-catchは私のコードをスピードアップさせるか?
-
[解決済み] なぜList<T>を継承しないのですか?
-
[解決済み] ファイルを作成し、書き込むにはどうすればよいですか?
-
[解決済み】大文字・小文字を区別しない「Contains(string)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】GDI+、JPEG画像をMemoryStreamに変換する際にジェネリックエラーが発生しました。
-
[解決済み】Ajax処理で「無効なJSONプリミティブ」と表示される件
-
[解決済み】ORA-01008: すべての変数がバインドされていません。これらはバインドされています。
-
[解決済み】値が期待した範囲に収まらない
-
[解決済み] [Solved] アセンブリ System.Web.Extensions dll はどこにありますか?
-
[解決済み] [Solved] 不正な文字列値: '\xEFxBFxBD' for column
-
[解決済み】EF 5 Enable-Migrations : アセンブリにコンテキストタイプが見つかりませんでした
-
[解決済み】MetadataException: 指定されたメタデータ・リソースをロードできない
-
[解決済み】ファイルへの読み書きの際に共有違反のIOExceptionが発生する C#
-
[解決済み】プロセスが実行されているかどうかを知るには?