適切な方法を使用してテーブル データを Excel にエクスポートし、Excel (xlsx) ファイルに正しい MIME タイプを設定するにはどうすればよいですか?
提供されているガイドでは、Excel ファイルの作成方法は説明されていません。代わりに、テーブルを含む HTML ファイルを生成する回避策が採用されています。 Excel では、デフォルト設定に準拠していないテーブルを含む CSV または HTML ファイルをインポートしようとすると、書式設定エラーが発生することがあります。
EPPlus を使用すると、正規の Excel ファイルの作成が大幅に簡単になります。 EPPlus の LoadFromDataTable および LoadFromCollection を使用して、DataTable または汎用コレクションからのデータを Excel 範囲に設定できます。ヘッダーはそれぞれ列名またはプロパティ名を使用して生成されます。
public ActionResult ExportData() { // Load data into a DataTable using (ExcelPackage package = new ExcelPackage()) { var ws = package.Workbook.Worksheets.Add("My Sheet"); // true generates headers ws.Cells["A1"].LoadFromDataTable(dataTable, true); var stream = new MemoryStream(); package.SaveAs(stream); string fileName = "myfilename.xlsx"; string contentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; stream.Position = 0; return File(stream, contentType, fileName); } }
LoadFromDataTable と LoadFromCollection は、テーブルに書式設定を適用するために使用できる Excel のセル範囲を返します。
var range = ws.Cells["A1"].LoadFromDataTable(table); range.Style.Numberformat.Format = "#,##0.00"; range.Style.HorizontalAlignment = ExcelHorizontalAlignment.Right;
Additionally 、表のスタイルを範囲に適用できます:
ws.Cells[1,1].LoadFromDataTable(table, true, TableStyles.Light1);
書式設定、数式、ピボットテーブルとテーブルの処理については、ライブラリの GitHub wiki ですべて見つけることができます。
MemoryStream への保存は、(メモリと出力ストリームへの) 重複したデータ書き込みのため、大きなシートには理想的ではない可能性があります。ただし、MVC アクションから直接 FileResult を返すことはお勧めできません。解決策は、EPPlus パッケージに合わせた FileResult を作成することです:
public class EpplusResult: FileResult { public EpplusResult(ExcelPackage package) : base("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet") { Package = package; } public ExcelPackage Package { get; private set; } protected override void WriteFile(HttpResponseBase response) { Package.SaveAs(response.OutputStream); } }
これにより、アクションで次のことが可能になります:
public FileResult ExportData() { ExcelPackage package = new ExcelPackage(); var ws = package.Workbook.Worksheets.Add("My Sheet"); ... ws.Cells[1,1].LoadFromDataTable(table, true, TableStyles.Light1); return new EpplusResult(package){FileDownloadName = "SomeFile.xlsx"}; }
以上が適切な MIME タイプと形式で DataTable データを Excel (.xlsx) ファイルにエクスポートする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。