Open XML SDK を使えば C# で Excel ファイル (.xlsx) を出力できた。
先日のサンプルではファイルに出力したけど、 SpreadsheetDocument はストリームへの出力にも対応している。
今度は Excel ファイルをダウンロードできる ASP.NET MVC サンプルを書いてみた。 レポートを Excel ファイルでダウンロードする機能が実現できそうだ。
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; using DocumentFormat.OpenXml; using DocumentFormat.OpenXml.Packaging; using DocumentFormat.OpenXml.Spreadsheet; using System.IO; namespace MvcExcelSample.Controllers { public class HomeController : Controller { public ActionResult Index() { return View(); } public ActionResult Excel() { byte[] fileContents; // 出力先はストリーム using (var stream = new MemoryStream()) { // スプレッドシートドキュメントを作成 var document = SpreadsheetDocument.Create(stream, SpreadsheetDocumentType.Workbook); // WorkbookPart をドキュメントに追加 var workbookPart = document.AddWorkbookPart(); workbookPart.Workbook = new Workbook(); // WorksheetPart を WorkbookPart に追加 var worksheetPart = workbookPart.AddNewPart<WorksheetPart>(); var sheetData = new SheetData(); worksheetPart.Worksheet = new Worksheet(sheetData); // Sheets をワークブックに追加 var sheets = workbookPart.Workbook.AppendChild(new Sheets()); // ワークシートをワークブックに追加 var sheet = new Sheet() { Id = workbookPart.GetIdOfPart(worksheetPart), SheetId = 1, Name = "Sample", }; sheets.Append(sheet); // sheetData に行を追加 var row1 = new Row(); row1.Append(new Cell() { DataType = CellValues.String, CellValue = new CellValue("A1 のセル"), }); sheetData.Append(row1); var row2 = new Row(); row2.Append(new Cell() { DataType = CellValues.String, CellValue = new CellValue("A2 のセル"), }); sheetData.Append(row2); // ワークブックを保存 worksheetPart.Worksheet.Save(); // ドキュメントを閉じる document.Close(); fileContents = stream.ToArray(); } return File(fileContents, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "sample.xlsx"); } } }