EPPlus로 엑셀파일 작성
ASP.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 = "Gulim";
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; // Page Break Preview
worksheet.View.ZoomScale = 100; // 줌 설정
worksheet.PrinterSettings.FitToPage = true; // 인쇄설정. 모든 열을 1페이지 내에 인쇄
worksheet.PrinterSettings.PaperSize = ePaperSize.A4; // 용지 사이즈
worksheet.PrinterSettings.FitToHeight = 0; // 용지 사이즈 조절(세로)
worksheet.PrinterSettings.FitToWidth = 1; // 용지 사이즈 조절(가로)
// Footer설정. 페이지 표시
worksheet.HeaderFooter.OddFooter.RightAlignedText = String.Format("{0} / {1}", ExcelHeaderFooter.PageNumber, ExcelHeaderFooter.NumberOfPages);
#endregion
// 값의 길이에 맞게 열의 폭을 조절
worksheet.Cells[worksheet.Dimension.Address].AutoFitColumns();
return package.GetAsByteArray();
}
}
Stream을 파일로 보존하고 싶을 경우엔 아래와 같이 사용합니다.
var path = "C:\test.xlsx";
File.WriteAllBytes(path, package.GetAsByteArray());