본문 바로가기
개발/ASP.NET

EPPlus로 엑셀파일 작성

by ispie 2019. 1. 16.

ASP.NET 기반의 업무용 웹 어플에서 엑셀 출력 기능을 개발하면서 찾아본 내용등을 간단히 정리한 내용입니다.

 

using OfficeOpenXml;
using OfficeOpenXml.Style;
 
/// <summary>
/// Model 데이터를 기반으로 Excel 작성
/// </summary>
/// <param name="excelModel">
/// <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());

 

 

원글 작성일  2016-12-21

댓글