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

본문 바로가기

Java & Kotlin API

블로그 & Tips

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

페이지 정보

작성자 GrapeCity 작성일 20-10-14 14:37 조회 678회 댓글 0건

본문

첨부파일

이전 보고서의 데이터만 바꿔서 새로운 보고서를 만들 방법은 없을까 생각해 보신 적이 있습니까? 동일한 레이아웃을 자주 사용하는 통합 문서의 경우 시간을 절약하려면 템플릿을 사용할 수밖에 없습니다.

템플릿이란 사전 정의되고 서식이 지정된 문서로서, 여기에는 정적 데이터 및 런타임 시 데이터 소스에서 입력될 동적 데이터를 위한 자리 표시자가 포함되어 있습니다. 템플릿을 사용하면 번거로운 반복 작업을 피하고 보고서의 더 중요한 측면에 집중할 수 있습니다.


GcExcel 템플릿 도입

GcExcel Java 최신 릴리스에서는 Excel 템플릿을 지원합니다. 사용자는 GcExcel 템플릿으로 데이터 생성 프로세스를 자동화하여 빠르고 쉽게 보고서를 생성할 수 있습니다. Excel 템플릿과 데이터 소스만 있으면 됩니다. Excel 문서를 데이터에 바인딩하여 고급 레이아웃의 Excel 보고서를 생성할 수 있는 API와 포괄적인 구문이 템플릿과 함께 제공됩니다. 유연한 템플릿 구문, 쉬운 표기법, 다양한 데이터 소스 지원, 프로그래밍 작업 최소화 등 여러 가지 장점을 갖춘 GcExcel 템플릿은 현재 출시된 보고서 생성 도구 중 사용자 정의 보고서를 가장 쉽게 실시간으로 생성할 수 있는 도구입니다.

제품 매출을 정기적으로 점검하여 추세를 분석하는 한 회사의 시나리오를 통해 GcExcel 템플릿으로 이러한 보고서를 얼마나 쉽게 생성할 수 있는지 알아보겠습니다.


비즈니스 시나리오: 템플릿을 사용해 분기별 제품 판매 보고서 생성

판매 보고서는 특정 기간의 판매 활동에 대한 레코드 집합입니다. 관리자는 이 보고서를 바탕으로 효과적인 판매 전략을 수립하는 한편 영업 팀의 실적을 모니터링할 수도 있습니다. 분기별 판매 보고서를 통해 판매 활동을 더 넓은 시야에서 바라보고, 추세를 분석하여 판매 예측 프로세스와 관련된 의사 결정에 참고할 수 있습니다.

다양한 제품을 판매하는 어떤 조직에서 수년에 걸친 판매 추세의 변화를 분석해야 한다고 가정합시다. 이 조직은 이를 위해 판매 보고서를 생성하고자 합니다. 그러나 판매 제품이 다양하고 앞으로 다른 기간의 판매 보고서도 생성해야 할 수 있으므로, 이들은 데이터베이스에서 매출 정보를 자동으로 가져와서 Excel 시트로 판매 보고서를 생성하는 식으로 보고서 생성 프로세스를 자동화하려고 합니다.

GcExcel 템플릿을 사용하면 이러한 요구 사항이 얼마나 쉽게 해결되는지 알아보겠습니다. 이 작업을 맡은 개발자는 먼저 MS Excel에서 모든 정적 데이터 및 매출 데이터의 자리 표시자가 포함된 템플릿을 설계해야 합니다. 설계는 한 번만 하면 됩니다. 템플릿이 준비되면 간단한 코드로 이 템플릿을 판매 데이터베이스와 바인딩합니다. 회계 연도별로 판매 보고서 Excel 시트를 하나씩 생성하는 나머지 작업은 영리한 GcExcel이 알아서 해 줍니다.

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

1.png

판매 보고서 생성을 시작하는 첫 단계는 MS Excel에서 템플릿을 만드는 것입니다. 템플릿 만들기는 일회성 작업이고 판매 보고서의 모양은 대개 디자인을 얼마나 잘하느냐에 따라 크게 달라지므로 GcExcel 템플릿 구문으로 템플릿을 만드는 방법을 익혀야 합니다.


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

동적 보고서를 생성할 때 가장 중요한 부분은 템플릿 만들기 기능입니다. 데이터베이스 필드를 정의할 때 사용한 특정 GcExcel 템플릿 구문에 따라 템플릿을 만들어야 합니다. 따라서 판매 보고서 템플릿의 어떤 부분에서 제품 및 매출 정보를 바꾸어 입력하든 간에 구문에 따라 데이터베이스 필드를 정의해야 합니다.

템플릿 만들기는 크게 다음 단계로 이루어집니다.

  • 데이터 정의
  • 데이터 필드 정의
  • 데이터 필드 템플릿 속성 설정
  • 수식 함수 사용

위 그림의 최종 보고서에는 Area, City 및 품목의 Category, Name, Sale과 같은 데이터 필드가 있으므로 이러한 필드를 템플릿에 추가해야 합니다. 이에 따라 Region, Item, Sale 클래스가 생성되고 판매 보고서 생성을 위한 도면의 역할을 합니다.

 

1. 데이터 필드 선언 - JAVA
public static class Item
{
 @JsonProperty("ProductID")
 private int ProductID;
 public int getProductID()
 { return this.ProductID; }
 public void setProductID(int productID)
 { this.ProductID = productID; }
​
 @JsonProperty("Name")
 private String Name;
 public String getName()
 { return this.Name; }
 public void setName(String name)
 { this.Name = name; }
​
 @JsonProperty("Category")
 private String Category;
 public String getCategory()
 { return this.Category; }
 public void setCategory(String category)
 { this.Category = category; }
​
 @JsonProperty("Revenue")
 private double Revenue;
 public double getRevenue()
 { return this.Revenue; }
 public void setRevenue(double revenue)
 { this.Revenue = revenue; }
}
​
public static class Region
{
 @JsonProperty("Area")
 private String Area;
 public String getArea()
 { return this.Area; }
 public void setArea(String area)
 { this.Area = area; }
​
 @JsonProperty("City")
 private String City;
 public String getCity()
 { return this.City; }
 public void setCity(String city)
 { this.City = city; }
}
​
public static class Sale
{
 @JsonProperty("Duration")
 private String Duration;
 public String getDuration()
 { return this.Duration; }
 public void setDuration(String duration)
 { this.Duration = duration; }
​
 @JsonProperty("Region")
 public Region Region;
 public Main.Region getRegion()
 { return this.Region; }
 public void setRegion(Main.Region region)
 { this.Region = region; }
​
 @JsonProperty("Item")
 public Item Item;
 public Main.Item getItem()
 { return this.Item; }
 public void setItem(Main.Item item)
 { this.Item = item; }
​
 public Sale()
 {
    this.Item = new Item();
    this.Region = new Region();
 }
}
​
public class RootObject
{
 @JsonProperty("Sales")
 private List<Sale> Sales;
 public List<Sale> getSales()
 { return this.Sales; }
 public void setSales(List<Sale> sales)
 { this.Sales = sales; }
}

  

여기서 @JsonProperty는 JSON 직렬화 및 비직렬화에 사용되는 논리적 속성을 정의합니다.

public @interface JsonProperty
{ String value(); }
​


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

2.1 데이터 필드 정의

GcExcel 템플릿 구문에서는 이중 중괄호 ''{{ }}"를 사용해 데이터베이스 필드를 정의합니다. 따라서 Area 이름, City 이름 등 동적 데이터 필드 값의 자리 표시자로 사용할 템플릿 셀에서 이중 중괄호 안에 데이터베이스 필드를 정의하십시오. 예를 들어 위 그림의 최종 보고서와 같이 항목의 영역 이름을 표시하는 방법을 알아보겠습니다.

이 이미지에 따르면 영역의 이름은 Region 클래스의 Area 속성에 매핑되고 Region은 Sale 클래스의 구성 요소이므로 C12 셀을 중첩된 필드{{Sales.Region.Area}}로 정의해야 합니다. 여기서 Sales는 데이터 소스의 이름입니다. 마찬가지로 수익 및 도시의 이름인 C14 및 C13 셀은 각각 {{Sales.Item.Revenue}}{{Sales.Region.City}}로 정의할 수 있습니다.

Category 및 Item 이름을 표시하는 방법도 동일합니다. 이러한 필드는 Item 클래스의 Category 및 Name 속성에 매핑되고 Sale 클래스는 Item 클래스를 구성 요소로 정의합니다. 따라서 A14 및 B14를 각각 {{Sales.Item.Category}}{{Sales.Item.Name}}으로 정의할 수 있습니다.

2.png


2.2 데이터 필드 속성 설정

데이터 필드의 대체 방식을 제어할 수 있도록 GcExcel은 Range, Expansion, Context 등 다양한 속성을 공개하고 있습니다. 이러한 속성은 '( )' 괄호 안에 들어갑니다. 개발자의 편의를 위해 셀 하나에 여러 속성을 동시에 정의한 다음 쉼표(,)로 분리하고 대소문자를 구분하도록 디자인할 수 있습니다. 또한 속성과 값의 약식 표기도 가능합니다.

이러한 속성은 보고서를 생성할 때 매우 유용하며 판매 보고서를 생성할 때도 대단히 중요합니다. 속성이 어떻게 작동하는지 알아보겠습니다.

확장

보고서의 데이터를 가로나 세로 방향으로 확장할 수 있습니다. 데이터의 확장 방향을 정의할 수 있도록 GcExcel 템플릿 구문은 확장(Expansion)을 뜻하는 'E' 속성을 제공합니다.

앞 단계에서는 자리 표시자 데이터 필드가 데이터베이스의 필드 값으로 대체되도록 정의했습니다. 그러나 동일한 데이터 필드에 값이 여러 개 있는 경우 확장되지 않으면 서로 겹치게 됩니다. 이를 방지하려면 확장 속성을 사용해야 합니다.

위에 표시된 최종 판매 보고서 그림에서 Category 및 Item 이름은 세로로 확장되어 있는 반면, Area 및 City 이름은 가로로 확장되어 있습니다. 이렇게 출력하려면 셀에서 각각 E=V 및 E=H를 정의해야 합니다.

이에 따라 C12 및 C13 셀의 정의는 {{Sales.Region.Area(E=H)}}{{Sales.Region.City(E=H)}}가 되어야 합니다. 마찬가지로 A14 및 B14 셀의 정의는 각각 {{Sales.Item.Category (E=V)}}{{Sales.Item.Name (E=V)}}가 됩니다.

확장 속성의 기본값은 세로(Vertical)를 뜻하는 'V'이므로, 세로 확장이 필요한 셀에서 확장 속성을 세로로 설정하지 않아도 됩니다.

3.png


컨텍스트

복잡한 사용 사례에서는 데이터 간에 관계가 있는 것이 당연합니다. 이러한 시나리오에서는 데이터 필드의 종속 필드 셀을 그룹화하거나 필터링할 수 있습니다. 이때 데이터 간의 관계를 정의하는 셀을 종속 셀의 컨텍스트 셀이라고 합니다.

세로 확장(E=V)을 위한 컨텍스트 셀은 왼쪽의 인접 셀이고, 가로 확장(E=H)은 기본적으로 위쪽의 인접 셀이 컨텍스트 셀입니다.

최종 판매 보고서에서 City 셀은 Area를 기준으로 필터링되어 해당 Area에 속하는 도시만 그 아래에 표시됩니다. 이러한 관계를 구현하려면 Area 셀이 City 셀의 컨텍스트 셀이 되어야 합니다. 따라서 City 셀을 {{Sales.Region.City(E=H, C=C12)}}로 정의해야 합니다.

4.png


2.3 수식 함수 사용

가장 단순한 형태의 수식은 셀 주소와 산술 연산자로 이루어진 표현식이며 함수는 사전 정의된 수식입니다. 설명하는 이름을 함수에 사용해 자동으로 수식을 적용하고 생산성을 높일 수 있습니다.

모든 보고서에는 숫자 데이터가 있기 마련이고 수식, 함수는 숫자 데이터 작업의 기본 요소이므로 GcExcel 템플릿 역시 Sum, Count, Average, Min, Max 등 가장 일반적인 Excel 함수를 지원합니다.

이 판매 보고서에서도 범주별로 생성된 수익을 분석하려면 Revenue 필드 값을 합산해야 합니다. 그러려면 Sum 함수를 사용하면 됩니다. 범주별로 계산이 이루어지므로 {{=Sum(C14)(C=A14)}}와 같이 Category 셀 A14가 D14 셀에 대해 컨텍스트 셀의 역할을 합니다. 마찬가지로 각 영역의 모든 도시를 포함하여 영역별 매출액을 계산하려면 Revenue 셀에 Sum 함수를 다시 사용하되, {{=Sum(C14)(C=C12)}}와 같이 Category 셀 C12를 컨텍스트로 사용하십시오.

5.png

별도의 시트를 생성할 수 있도록 GcExcel은 여러 시트를 생성하는 기능을 지원합니다. GcExcel 템플릿 구문에 따라 시트의 이름을 바꾸면 됩니다.

마찬가지로 판매 보고서의 회계 연도별로 여러 개의 Excel 시트를 생성하려면 Excel에서 이름을 {{Sales.Duration}}으로 바꾸기만 하면 됩니다. 여기서 Duration은 Sale 클래스의 속성입니다.

6.png

위의 그림은 GcExcel 템플릿 구문을 사용하여 만든 최종 Excel 템플릿의 모습이기도 합니다.

Sales_Template.xlsx

이 구문을 익히고 판매 보고서용 Excel 템플릿을 만들었으면 GcExcel에서 이 템플릿을 로드하고, 데이터를 추가하고, 템플릿을 처리하십시오. 그러면 보고서가 생성됩니다.

 

GcExcel 템플릿 사용 단계


1단계: 설치


필수 구성 요소

  1. Windows/Linux/Mac용 Java 6 SDK 이상 버전을 설치합니다.
  2. 원하는 Java IDE를 설치합니다. 이 문서에서는 GcExcel을 IntelliJ와 함께 사용하는 방법을 중점적으로 살펴봅니다.

IntelliJ에 GcExcel 패키지 설치

  1. 웹 사이트에서 GcExcel 패키지(gcexcel-3.0.0.jar 및 gcexcel-extension-3.0.0.jar)를 다운로드합니다.
  2. IntelliJ IDE를 엽니다.
  3. 새 Java 프로젝트를 만듭니다.
  4. 이 프로젝트 아래에 'libs'라는 새 디렉터리를 추가합니다.
  5. 파일 탐색기에서 gcexcel-3.0.0.jar, gcexcel-extension-3.0.0.jar 및 gson-2.8.5.jar를 'libs'로 복사합니다.

*gson-2.8.5.jar는 json 문자열 역직렬화에 사용되는 Google gson jar 파일입니다. 여기에서 다운로드하실 수 있습니다.

  1. 'libs' 폴더를 마우스 오른쪽 버튼으로 클릭하고 '라이브러리로 추가' 옵션을 선택합니다.
  2. '확인'을 누릅니다.
  3.  
Gradle 프로젝트인 경우:

build.gradle을 열고 종속성 블록 컴파일에 스크립트를 추가합니다("com.grapecity.documents:gcexcel:3.0.0.jar").

 

Maven 프로젝트인 경우:

pom.xml을 열고 종속성 노드에 다음 xml 요소를 추가합니다.


<dependency>
   <groupId>com.grapecity.documents</groupId>
   <artifactId>gcexcel</artifactId>
   <version>3.0.0-snapshot</version>
</dependency>

jar 파일이 프로젝트의 라이브러리로 추가되고, 이제 프로젝트에서 이 jar 파일에 있는 모든 GcExcel 클래스를 참조할 수 있게 됩니다.

 

2단계: 프로젝트 설정


네임스페이스 추가

Main.java에서 다음 네임스페이스를 가져옵니다.

import com.grapecity.documents.excel.Workbook;
import com.google.gson.Gson;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.List;
​


새 통합 문서 만들기

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

Workbook workbook = new Workbook();


Excel 템플릿 로드

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

workbook.open("Sales_Template.xlsx");


데이터 초기화

GcExcel 템플릿은 사용자 정의 개체, JSON 파일, 결과 집합, 변수, 데이터 집합/데이터 표 등 다양한 유형의 데이터 소스를 지원합니다. 여기에서는 JSON 파일을 GcExcel 데이터 소스로 사용하는 방법을 집중적으로 살펴보겠습니다.

InputStreamReader reader = new InputStreamReader(GetResourceStream("SalesData.json"));

SalesData.json 파일을 Main.java 파일이 있는 'src' 폴더에 둡니다.

 

데이터 소스 추가

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

Gson gson = new Gson();
RootObject datasource = gson.fromJson(reader, RootObject.class);
workbook.addDataSource("Sales", datasource.getSales();

 

프로세스 템플릿

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

workbook.processTemplate();


보고서를 XLSX로 저장

처리된 GcExcel을 Excel 파일로 내보낼 수 있습니다. 다음과 같이 Save 메서드를 사용해 XLSX 형식의 판매 보고서를 생성합니다.

workbook.save("SalesReport.xlsx");

 

응용 프로그램 다운로드

Templates_GcExcel_JAVA.zip

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

  • 페이스북으로 공유
  • 트위터로  공유
  • 구글플러스로 공유
  • 카카오톡으로 보내기

댓글목록

등록된 댓글이 없습니다.

그레이프시티 홈페이지를 통해 제품에 대해서 더 자세히 알아 보세요!
홈페이지 바로가기

태그

인기글

더보기
  • 인기 게시물이 없습니다.
그레이프시티 홈페이지를 통해 제품에 대해서 더 자세히 알아 보세요!
홈페이지 바로가기
이메일 : sales-kor@grapecity.com | 전화 : 1670-0583 | 경기도 안양시 동안구 시민대로 230, B-703(관양동, 아크로타워) 그레이프시티(주) 대표자 : 허경명 | 사업자등록번호 : 123-84-00981 | 통신판매업신고번호 : 2013-경기안양-00331 Copyright ⓒ 2021 GrapeCity inc.