序文データを頻繁に扱う方であれば、Excelでインポートやエクスポートといったデータ操作に遭遇することは避けられません。しかし、大量のデータを扱う際には、メモリオーバーフローというよくある問題が発生します。そこで本日は、Excelを操作するためのシンプルで効率的、かつメモリ使用量が少なく、OOM(Out of Memory)を回避できる.NETオープンソースフレームワーク、MiniExcelをご紹介します。 公式紹介MiniExcelは、Excelデータの取得、書き込み、そしてOutOfMemoryError(OOM)を回避しながら、シンプルかつ効率的な.NETツールです。多くの主流フレームワークは、操作を容易にするためにすべてのデータをメモリにロードする必要があり、これがメモリ消費の問題につながります。MiniExcelは、基盤となるアルゴリズムロジックをストリームの観点から記述することで、元々1000MB以上あったメモリをわずか数MBにまで削減し、メモリ不足を回避します。 写真 プロジェクトの特徴- メモリ消費量が少なく、OOM や Full GC の頻繁な状況を回避します。
- 各データ行のリアルタイム操作をサポートします。
- また、LINQ 遅延クエリ機能も備えており、低いオーバーヘッドと高速なページネーションで複雑なクエリを可能にします。
- 軽量で、Microsoft Office や COM+ のインストールは必要なく、DLL サイズは 150 KB 未満です。
- ユーザーフレンドリーな API スタイル。
主流のExcelフレームワークのパフォーマンス比較Excel比較のインポートとクエリ写真 Excel比較のエクスポートと作成写真 クイックスタート注: 以下に示しているのはコード例の一部です。フレームワークの詳細な機能については、ソースコードをご覧ください: https://gitee.com/dotnetchina/MiniExcel
クエリは、Excel ファイルから厳密に型指定された IEnumerable データを返します。 public class UserAccount { public Guid ID { get; set; } public string Name { get; set; } public DateTime BoD { get; set; } public int Age { get; set; } public bool VIP { get; set; } public decimal Points { get; set; } } var rows = MiniExcel.Query<UserAccount>(path); // or using (var stream = File.OpenRead(path)) var rows = stream.Query<UserAccount>(); 写真 クエリ関数は、Excel ファイルから Dynamic IEnumerable データを取得します。 var rows = MiniExcel.Query(path).ToList(); // or using (var stream = File.OpenRead(path)) { var rows = stream.Query().ToList(); Assert.Equal("MiniExcel", rows[0].A); Assert.Equal(1, rows[0].B); Assert.Equal("Github", rows[1].A); Assert.Equal(2, rows[1].B); } <匿名カテゴリ> または <強力なタイプ> のコレクションをサポートします。 var path = Path.Combine(Path.GetTempPath(), $"{Guid.NewGuid()}.xlsx"); MiniExcel.SaveAs(path, new[] { new { Column1 = "MiniExcel", Column2 = 1 }, new { Column1 = "Github", Column2 = 2} }); IEnumerable<IDictionary<文字列、オブジェクト>> var values = new List<Dictionary<string, object>>() { new Dictionary<string,object>{{ "Column1", "MiniExcel" }, { "Column2", 1 } }, new Dictionary<string,object>{{ "Column1", "Github" }, { "Column2", 2 } } }; MiniExcel.SaveAs(path, values); 写真 IDataReader すべてのデータをメモリにロードすることを回避するため、使用することをお勧めします。
MiniExcel.SaveAs(path, reader); 写真 複数テーブルのエクスポートには DataReader を使用することをお勧めします (Dapper ExecuteReader が推奨されます)。 using (var cnn = Connection) { cnn.Open(); var sheets = new Dictionary<string,object>(); sheets.Add("sheet1", cnn.ExecuteReader("select 1 id")); sheets.Add("sheet2", cnn.ExecuteReader("select 2 id")); MiniExcel.SaveAs("Demo.xlsx", sheets); } プロジェクトのソースコードアドレスプロジェクトのより便利な機能や機能については、プロジェクトのオープンソース アドレス 👀 にアクセスしてください。また、プロジェクトにスターを付けてサポートを示すこともお忘れなく 💖 ください。 https://gitee.com/dotnetchina/ミニエクセル 厳選された優れたプロジェクトとフレームワークこのプロジェクトは、「厳選された優れたC#/.NET/.NET Coreプロジェクトとフレームワーク」セクションに選出されました。この選出をフォローすることで、C#、.NET、.NET Coreの最新の開発状況やベストプラクティスを把握し、開発の効率と品質を向上させることができます。プロジェクトは準備完了です。皆様からのPR投稿や自己推薦をお待ちしております( 让优秀的项目和框架不被埋没🤞 )。 https://github.com/YSGStudyHards/DotNetGuide/blob/main/docs/DotNet/DotNetProjectPicks.md |