EPPLUSでエクセルファイル作成
.NET環境でエクセル出力をする場面があったので自分用にまとめてみました。
using OfficeOpenXml; using OfficeOpenXml.Style; /// <summary> /// Modelデータを元にExcel作成 /// </summary> /// <param name="excelModel"></param> /// <returns>byte[]</returns> public byte[] MakeDetailsAsExcel(ContractExcelModel excelModel) { using (var package = new ExcelPackage()) { var worksheet = package.Workbook.Worksheets.Add("Sheet1"); worksheet.Column(1).Width = 3; var allRangeHeight = 500; // worksheet.Column(2)からworksheet.Column(32)まで同じ幅を設定 for (int i = 2; i <= 32; i++) { worksheet.Column(i).Width = 3.9; } for (int i = 1; i <= allRangeHeight; i++) { worksheet.Row(i).Height = 11.25; } // 現在の行数。基本的に該当行の処理を終えると同時に改行(+1)する(currentRow++)。処理が複雑な場合は最後に行数を足す。 int currentRow = 1; int headBlockRow = 1; var lightGrayColor = Color.FromArgb(242, 242, 242); var grayColor = Color.FromArgb(217, 217, 217); var allRange = worksheet.Cells[1, 1, allRangeHeight, 32]; allRange.Style.Fill.PatternType = ExcelFillStyle.Solid; allRange.Style.Fill.BackgroundColor.SetColor(System.Drawing.ColorTranslator.FromHtml("#FFFFFF")); allRange.Style.Font.Name = "MS Pゴシック"; allRange.Style.Font.Size = 9; allRange.Style.VerticalAlignment = ExcelVerticalAlignment.Center; var listData = new ExcelListDefaultModel(); // データ設定後、現在の行数に+1をする currentRow++; headBlockRow = currentRow; var infoRange = worksheet.Cells["B" + currentRow + ":L" + (currentRow + 5)]; infoRange.Style.Border.BorderAround(ExcelBorderStyle.Thin); worksheet.Cells["B" + currentRow++].Value = excelModel.Name; currentRow++; // Modelの値をエクセルに打ち込む #region 最後に出力範囲指定(印刷範囲を指定したい場合) worksheet.PrinterSettings.PrintArea = worksheet.Cells["A1:AF" + currentRow]; // 印刷範囲(全体) worksheet.View.PageBreakView = true; // 改ページプレビュー worksheet.View.ZoomScale = 100; // ズーム worksheet.PrinterSettings.FitToPage = true; // 印刷設定:すべての列を1ページに印刷 worksheet.PrinterSettings.PaperSize = ePaperSize.A4; // 用紙サイズ worksheet.PrinterSettings.FitToHeight = 0; // 用紙内のサイズ調整(縦) worksheet.PrinterSettings.FitToWidth = 1; // 用紙内のサイズ調整(横) // フッター設定:ページ表示 worksheet.HeaderFooter.OddFooter.RightAlignedText = String.Format("{0} / {1}", ExcelHeaderFooter.PageNumber, ExcelHeaderFooter.NumberOfPages); #endregion // 値の長さに合わせてカラムの幅を調整 worksheet.Cells[worksheet.Dimension.Address].AutoFitColumns(); return package.GetAsByteArray(); } }
2018.07.26 追記
ストリームをファイルに保存したい場合
var currentPath = System.AppDomain.CurrentDomain.BaseDirectory;
var FullPath = currentPath + "test.xlsx";
File.WriteAllBytes(FullPath, package.GetAsByteArray());