! 제품 버전을 정확하게 입력해 주세요.
제품 버전이 정확하게 기재되어 있지 않은 경우,
최신 버전을 기준으로 안내 드리므로
더욱 빠르고 명확한 안내를 위해
제품 버전을 정확하게 입력해 주세요!

.NET에서 Excel(.xlsx) 템플릿을 사용해 사용자 정의 보고서를 만드는 방법 > 블로그 & Tips

본문 바로가기

.NET API

블로그 & Tips

.NET에서 Excel(.xlsx) 템플릿을 사용해 사용자 정의 보고서를 만드는 방법

페이지 정보

작성자 GrapeCity 작성일 2020-10-14 11:01 조회 5,054회 댓글 0건

본문

분야와 관계없이 모든 조직에서는 프로젝트 기획 및 관리, 발주, 재고 유지 관리, 송장 작성 등 일상적으로 반복되는 작업을 수행합니다. 업무 흐름을 체계적으로 유지하기 위해서는 이러한 작업에 몇 시간을 오롯이 할애해야 합니다. 조직들은 프로세스를 자동화하여 이렇게 낭비되는 시간을 줄일 방법을 모색하고 있습니다. 바인딩된 구조적 문서(템플릿)는 바로 이런 경우에 제 몫을 합니다.


템플릿이란 사전 정의되고 서식이 지정된 통합 문서로서, 템플릿을 사용하면 최종 보고서를 만드는 데 도움이 됩니다. 템플릿이 있으면 목적에 따라 약간만 수정하면 되고, 그 이후에는 몇 번이고 다시 사용할 수 있어 노력의 낭비를 대폭 줄일 수 있습니다.


GcExcel 템플릿 도입


GcExcel .NET Core API(GcExcel)은 Excel 문서에 데이터를 바인딩하여 고급 레이아웃의 Excel 보고서를 생성할 수 있는 API와 포괄적인 구문을 담은 최신 템플릿을 지원합니다. 유연한 템플릿 구문, 쉬운 표기법, 다양한 데이터 소스 지원, 프로그래밍 작업 최소화 등 여러 가지 장점을 갖춘 GcExcel 템플릿으로 편리하게 Excel 템플릿을 정의하고 Excel 보고서를 만들 수 있습니다.


분기별 제품 판매 보고서를 생성하면서 GcExcel 템플릿을 사용하기가 얼마나 쉬운지 알아보겠습니다.


템플릿을 사용해 분기별 제품 판매 보고서 생성


판매 보고서는 회사 내에서 영업 활동의 현황을 파악하는 방법입니다. 이 보고서는 판매량의 추세 변화를 보여 주고 잠재적인 문제를 경영진에게 경고합니다. 제품별 판매 현황을 정기적으로 점검하면 기대한 만큼의 수익을 올리고 있는지 평가하는 데 도움이 됩니다.


한 조직에서 여러 가지 제품을 판매한다고 가정합시다. 이 조직은 장기간에 걸친 판매 추세 변화를 분석하기 위해 판매 보고서를 만들고 싶어합니다. 이 회사는 판매 보고서를 수작업으로 작성하는 대신 데이터베이스에서 제품 및 판매 정보를 가져오는 프로세스를 자동화하고 분기별 판매 보고서를 Excel 스프레드시트로 생성하고자 합니다.


개발자는 GcExcel 템플릿을 사용하여 위와 같은 요구 사항을 손쉽게 구현할 수 있습니다. MS Excel로 템플릿을 디자인하고 단순한 코드를 적용해 이 템플릿을 데이터베이스와 바인딩하십시오. 그러면 GcExcel이 매 회계 연도의 제품 매출을 기준으로 별도의 Excel 스프레드시트를 생성합니다.


다음 그림은 특정 분기의 판매 보고서를 보여 줍니다.

.Net Core에서 Excel 파일의 피벗 테이블 스타일 지정


이 보고서를 생성하려면 먼저 MS Excel에서 템플릿을 만들어야 합니다. 이 템플릿에 따라 최종 보고서의 모양이 달라집니다. 시작하기 전에, GcExcel 템플릿 구문을 사용해 템플릿을 만드는 방법부터 알아보겠습니다.


.NET 응용 프로그램에서 XLSX 템플릿 생성


템플릿 만들기는 동적 보고서 생성에서 가장 중요한 단계입니다. 템플릿을 만들 때는 데이터베이스 필드를 정의할 때 사용했던 특정한 GcExcel 템플릿 구문을 따라야 합니다. 그러므로 판매 템플릿에서 제품 및 판매 정보를 대체하려는 모든 부분에서 이 구문에 따라 데이터베이스 필드를 정의해야 합니다.

템플릿 만들기는 크게 다음과 같은 단계로 나뉩니다.

  • 데이터 정의

  • 데이터 필드 정의

  • 데이터 필드 템플릿 속성 설정

  • 수식 함수 사용


1. 데이터 정의 - (C#)

위 그림에서 보듯이 최종 예상 보고서에 영역, 도시 및 품목의 범주, 이름, 매출액과 같은 데이터 필드가 표시되므로 이를 추가해야 합니다.

지역, 품목, 매출액 클래스가 생성되어 판매 보고서 생성을 위한 청사진의 역할을 합니다.


데이터 필드 선언 - (C#)
public class Item
{
  public Int32 ProductID { get; set; }
  public string Name { get; set; }
  public string Category { get; set; }
  public double Revenue { get; set; }
}
public class Region
{
  public string Area { get; set; }
  public string City { get; set; }
}
public class Sale
{
  private Region _region;
  private List<Item> _items;
  public int Year { get; set; }
  public Region Region
  {
      get { return _region; }
      set { region = value; }
  }
  public List<Item> Items
  {
      get { return _item; }
      set { items = value; }
  }
  public Sale()
  {
      Items = new List<Item>();
      Region = new Region();
  }
}
 

2. MS Excel에서 템플릿 만들기

데이터 정의가 준비되었으면 Excel에서 템플릿 만들기를 시작하고 개별 데이터 필드 셀을 청사진의 해당 정의에 매핑하면 됩니다.

다음 단계에 따라 템플릿 만들기 프로세스를 진행합니다.


2.1 데이터 필드 정의


GcExcel 템플릿 구문에서는 이중 중괄호 '{{ }}'를 사용해 데이터베이스 필드를 정의합니다. 범주 이름, 도시 이름 등 동적으로 생성된 필드 값을 표시하려는 템플릿 셀에서 중괄호 안에 데이터베이스 필드를 정의하십시오.


Excel 셀에서 데이터 필드를 정의하는 방법을 정확히 이해할 수 있도록 위의 최종 보고서 그림에 나온 품목의 범주 이름을 표시해 보겠습니다.


데이터에 따르면 범주의 이름은 Item 클래스의 Category 속성에 매핑되고 Item 컬렉션은 Sale 클래스의 구성 요소이므로 A14 셀을 중첩된 필드{{Sales.Items.Category}}로 정의해야 합니다. 여기서 Sales는 데이터 소스의 이름입니다. 마찬가지로 품목의 이름 셀과 수익 셀인 B14와 C14는 {{Sales.Items.Name}}{{Sales.Items.Revenue}}로 정의할 수 있습니다.


Area 및 City를 표시하는 방법도 동일합니다. 이러한 필드는 Region 클래스의 Area 및 City 속성에 매핑되며, Sale 클래스는 Region 클래스를 멤버로 정의하므로 C12 및 C13 셀을 각각 {{Sales.Region.Area}}{{Sales.Region.City}}로 정의할 수 있습니다.

.Net Core에서 Excel 파일의 피벗 테이블 스타일 지정



2.2 데이터 필드 속성 설정


GcExcel에서는 데이터 필드의 값이 동적으로 대체되는 것은 물론 대체 방식도 간편해집니다. 이를 위해 Expansion, Context, Range, Group, Sort 등의 속성을 이용합니다. GcExcel은 ‘(‘ 및 ‘)‘ 괄호를 사용해 모든 템플릿 속성을 체계적으로 정리합니다. 속성은 키-값 형식으로 설정되며 여러 속성을 쉼표로 구분할 수 있습니다. 개발자의 편의를 위해 속성 이름 및 값은 대소문자를 구분하며 약식 표기법을 지원합니다.

이제 판매 보고서 생성에 이러한 속성 몇 가지를 사용하는 방법을 알아보겠습니다.


Expansion

위에서는 필드 값이 동적으로 대체되도록 데이터 필드 셀을 정의했지만, 동일한 데이터 필드의 값이 여러 개라면 세로 또는 가로 방향으로 자동으로 확장되게 해야 할 것입니다. 최종 판매 보고서와 마찬가지로 영역 및 도시는 가로 방향으로 나란히 표시되는 반면, 품목의 범주 및 이름은 세로로 표시됩니다.


템플릿 구문에서는 Expansion 속성을 사용해 데이터 확장 방향을 정의할 수 있습니다. 원한다면 가로 또는 세로 방향으로 필드를 확장할 수 있지만 기본값은 세로 확장입니다.


따라서 영역과 도시가 가로 방향으로 확장되게 하려면 괄호 안에 E=H를 사용해야 합니다. 이 경우 C12 및 C13 셀의 정의는 {{Sales.Region.Area(E=H)}}{{Sales.Region.City(E=H)}}가 되어야 합니다. 마찬가지로 품목의 Category 및 Name을 세로로 확장하려면 A14 셀을 {{Sales.Items.Category(E=V)}}로, B14 셀을 {{Sales.Items.Name(E=V)}}로 각각 정의하면 됩니다. 그러나 확장의 기본 설정값은 세로이므로 설정을 건너뛰어도 동일한 결과를 얻을 수 있습니다.

.Net Core에서 Excel 파일의 피벗 테이블 스타일 지정


Context


동일한 시트에서 여러 셀이 바인딩되는 경우 셀 간에 관계가 형성될 수 있습니다. 한 데이터 필드로 다른 필드의 값을 필터링할 수도 있고, 종속되는 필드 셀을 그룹화할 수도 있습니다. 이러한 경우 그 이전 셀을 종속 셀의 컨텍스트 셀이라고 합니다. GcExcel의 Context 속성을 정의하여 컨텍스트 셀을 기준으로 한 종속 셀의 확장 방향을 지정할 수 있습니다.


위의 최종 판매 보고서 그림에서 Area 및 City는 가로로 확장되고 해당 영역에 속하는 도시만 그 아래에 표시됩니다. 즉 Area 필드로 그 아래에 있는 City를 필터링합니다. 이러한 관계를 구현하려면 City 셀인 C13의 컨텍스트를 {{Sales.Region.City(E=H, C=C12)}}와 같은 Area 셀로 설정해야 합니다.


그러나 세로 확장(E=V)을 위한 컨텍스트 셀은 왼쪽의 인접 셀이고, 가로 확장(E=H)의 컨텍스트 셀은 기본적으로 위쪽의 인접 셀입니다. City 셀은 가로 방향으로 확장되므로(E=H) 이 셀의 컨텍스트 셀은 기본적으로 C12입니다. 따라서 이 셀은 컨텍스트 셀을 명시적으로 설정하지 않아도 됩니다.

.Net Core에서 Excel 파일의 피벗 테이블 스타일 지정


2.3 수식 함수 사용


데이터 필드를 정의했으면 이 데이터 필드의 값을 분석해야 합니다. 이를 위해 GcExcel 템플릿 구문에서는 Sum, Count, Average, Min, Max 등 가장 일반적인 Excel 함수를 지원합니다.


분기별 판매 보고서의 각 영역에서 발생한 수익을 분석하려면 해당 영역 내 모든 도시의 수익 필드 값을 합산해야 합니다. 그러려면 {{=Sum(C14)(C=C12)}}와 같이 Area 셀인 C12를 컨텍스트로 하여 Revenue 데이터 필드에 Sum 함수를 사용하면 됩니다. 마찬가지로 각 Category의 매출을 계산하려면 Revenue 셀에 Sum 함수를 다시 사용하되 이번에는 {{=Sum(C14)(C=A14)}}와 같이 Category 셀 A14를 컨텍스트로 사용하십시오.


또한 총 매출을 구하려면 D14 또는 C15 셀에서 Sum 함수를 사용하면 됩니다. 두 셀 모두 동일한 총 수익을 반환하기 때문입니다.

.Net Core에서 Excel 파일의 피벗 테이블 스타일 지정


이 외에도 올해의 분기별 데이터를 전년도와 비교하기 위해 여러 시트를 생성할 수 있습니다. 그러려면 Excel에서 템플릿 시트의 이름을 {{Sales.Duration}}으로 바꾸기만 하면 됩니다. 여기서 Duration은 Sale 클래스의 속성입니다.


다음은 GcExcel 템플릿 구문이 포함된 템플릿이 어떤 모양인지 보여주는 그림입니다.

.Net Core에서 Excel 파일의 피벗 테이블 스타일 지정

Sales_Template.xlsx


이 구문을 이해하고 판매 보고서용 템플릿을 만들었다면 이제 그 템플릿을 로드하고, 데이터를 추가하고, 템플릿을 실행하십시오. 그렇게 하면 보고서가 완성됩니다.


GcExcel 템플릿 사용 단계

템플릿은 비즈니스에 엄청나게 유용할 수 있으며, GcExcel 템플릿은 이러한 프로세스를 자동화하는 데 도움이 됩니다. 이제 사용할 응용 프로그램에서 GcExcel 템플릿을 구현할 준비가 되었습니다.

아래에서는 GcExcel 어셈블리를 로드하는 단계부터 Excel 보고서를 생성하는 단계까지 안내합니다.


1. 설치

1.1 .Net Core 콘솔 응용 프로그램에서 '종속성(Dependencies)'을 마우스 오른쪽 버튼으로 클릭하고 'NuGet 패키지 관리(Manage NuGet Packages)'를 선택합니다.

1.2 ‘찾아보기(Browse)’ 탭에서 GrapeCity.Documents.Excel을 검색하고 ‘설치’를 클릭합니다.

1.3 설치 중에 ‘미리 보기 변경(Preview Changes)’ 및 ‘라이선스 수락(License Acceptance)’ 여부를 묻는 대화 상자가 나타나면 ‘확인’ 및 ‘동의함’을 각각 클릭하여 계속 진행합니다.


2. 프로젝트 설정


2.1 네임스페이스 추가

프로그램 파일에서 다음 네임스페이스를 가져옵니다.

Workbook book = new Workbook();

2.2 새 통합 문서 만들기

기본 함수에 다음 코드를 추가하여 새 GcExcel 통합 문서를 만듭니다.

Workbook book = new Workbook();


2.3 Excel 템플릿 로드 

Open 메서드를 사용하여 기존의 Excel 템플릿 파일(그림 1에 표시되어 있음)을 GcExcel 통합 문서에 로드합니다.

book.Open("Sales_Template.xlsx");



2.4 데이터 초기화

로드된 Excel 템플릿의 데이터 필드를 채울 데이터를 다음과 같이 준비합니다.

var sales = new List<Sale>();
Sale sale1 = new Sale();
Item item1 = new Item()
{
    ProductID = 1140,
    Category = "Mobile",
    Name = "Iphone XR",
    Revenue = 2334091
};
sale1.Items.Add(item1);       
sale1.Duration = "2018-19";
sale1.Region = new Region() { Area = "South China", City = "Macau" }; ;
sales.Add(sale1);


참고: GcExcel 템플릿을 사용하면 DataSet/DataTable, 사용자 정의 객체, 변수, 배열/리스트 등 원하는 객체의 데이터를 직접 Excel 템플릿에 바인딩할 수 있습니다.


2.5 데이터 소스 추가

AddDataSource 메서드를 사용해 통합 문서에 데이터를 로드합니다.

book.AddDataSource("Sales", sales);


2.6 템플릿 처리

ProcessTemplate을 사용해 템플릿을 실행합니다. 이 메서드를 호출하면 통합 문서에 로드된 Excel 템플릿에 자동으로 데이터 필드가 바인딩됩니다.

book.ProcessTemplate();


2.7 보고서를 XLSX로 저장 

마지막으로 이 모든 내용을 Excel 파일로 내보냅니다. 데이터베이스 필드가 템플릿에 어떻게 동적으로 바인딩되는지 확인하고 최종 보고서를 볼 수 있습니다.

book.Save("../../../SalesReport.xlsx");



다른 모든 코드 ‘뒤에’ 이 코드 행을 추가하여 코드 처리 후에 저장되도록 합니다.

GcExcel.zip 템플릿 다운로드

데모 및 문서:

.NET 도움말 | Java 도움말 | .NET 데모 | Java 데모


  • 페이스북으로 공유
  • 트위터로  공유
  • 링크 복사
  • 카카오톡으로 보내기

댓글목록

등록된 댓글이 없습니다.

메시어스 홈페이지를 통해 제품에 대해서 더 자세히 알아 보세요!
홈페이지 바로가기

태그1

인기글

더보기
  • 인기 게시물이 없습니다.
메시어스 홈페이지를 통해 제품에 대해서 더 자세히 알아 보세요!
홈페이지 바로가기
이메일 : sales-kor@mescius.com | 전화 : 1670-0583 | 경기도 과천시 과천대로 7길 33, 디테크타워 B동 1107호 메시어스(주) 대표자 : 허경명 | 사업자등록번호 : 123-84-00981 | 통신판매업신고번호 : 2013-경기안양-00331 ⓒ 2024 MESCIUS inc. All rights reserved.