Excel 공통 컴포넌트

15
EXCEL CHART 공공 공공공공 공공

Transcript of Excel 공통 컴포넌트

Page 1: Excel 공통 컴포넌트

EXCEL CHART공통 컴포넌트 조사

Page 2: Excel 공통 컴포넌트

1) Sheet 에서 Drawing 객체를 받아 Chart 객체를 생성 ..

Drawing drawing = sheet.createDrawingPatriarch();

ClientAnchor anchor = drawing.createAnchor(0, 0, 0, 0, 0, 5, 10, 15);

Chart chart = drawing.createChart(anchor);

ChartLegend legend = chart.getOrCreateLegend();

legend.setPosition(LegendPosition.TOP_RIGHT);

2) ScatterChartData 객체를 통해 Excel 의 ChartData 형식을 만듦 .

//Scatterchart 로 정의

ScatterChartData data = chart.getChartDataFactory().createScatterChartData();

1. POI EXCEL CHART 구현 (1)

방법 (1) : Excel 차트를 새로 만들어 , Data 범위를 지정하여 , 엑셀에 반영하는 방식

Page 3: Excel 공통 컴포넌트

1. POI EXCEL CHART 구현 (1)

3) 축 (Axis) 설정 / Series( 범례 ) 지정ValueAxis bottomAxis = chart.getChartAxisFactory().createValueAxis(AxisPosition.BOTTOM);

ValueAxis leftAxis = chart.getChartAxisFactory().createValueAxis(AxisPosition.LEFT);

leftAxis.setCrosses(AxisCrosses.MAX);

ChartDataSource<Number> xs = DataSources.fromNumericCellRange(

sheet, new CellRangeAddress(0, 0, 0, NUM_OF_COLUMNS - 1));

ChartDataSource<Number> ys1 = DataSources.fromNumericCellRange(

sheet, new CellRangeAddress(1, 1, 0, NUM_OF_COLUMNS - 1));

ChartDataSource<Number> ys2 = DataSources.fromNumericCellRange(

sheet, new CellRangeAddress(2, 2, 0, NUM_OF_COLUMNS - 1));

data.addSerie(xs, ys1);

data.addSerie(xs, ys2);

4) 실제 Chart 를 그림 .

chart.plot(data, bottomAxis, leftAxis);

Page 4: Excel 공통 컴포넌트

1. POI EXCEL CHART 구현 (1)

현재 계열 (Series) 의 제목 (title) 수정 불가

현재 차트 레이아웃 수정 불가 .

Page 5: Excel 공통 컴포넌트

1.현재 POI 를 이용할 경우 , 동적으로 ( 가로 /세로 ) 열 /행 지정은 가능하지만 , 분포도 (ScatterChart) 차트만 지원하고 있습니다 .

2. 이 역시 제한적인 지원이며 , 차트 제목 이나 layout 수정과 같은 세부적인 기능은 현재는 지원하지 않고 있습니다 .

1. POI EXCEL CHART 구현 (1)

( 문제점 )

Page 6: Excel 공통 컴포넌트

InputStream myxls = new FileInputStream("line_chart.xls");

wb = new HSSFWorkbook(myxls);

Sheet sheet = wb.getSheetAt(0);

//Chart 를 가져올수있음 .

HSSFChart[] chart = HSSFChart.getSheetCharts((HSSFSheet)sheet);

HSSFSeries[] series = chart[0].getSeries();

for(int i=0;i<series.length;i++){

printSerie(series[i]);

//series[i].setSeriesTitle( "new series" ) ;

series[i].setCategoryLabelsCellRange(new CellRangeAddress(4,23,3,3));

}

// 계열 추가가능

HSSFSeries serie = chart[0].createSeries();

serie.setValuesCellRange(new CellRangeAddress(4, 23, 2, 2));

serie.setCategoryLabelsCellRange(new CellRangeAddress(4,23,3,3));// 가로축 설정 .

printSerie(serie);

1. POI EXCEL CHART 구현 (2)

방법 (2) : 미리 Excel Chart 를 만들어 놓고 , (Template 파일처럼 .)이를 읽어서 데이터 및 차트 범위만 수정하여 사용 .

Page 7: Excel 공통 컴포넌트

1. POI EXCEL CHART 구현 (2)

Page 8: Excel 공통 컴포넌트

1.이 경우 , 기본적인 차트 (Area ,Bar, Line ,Pie, Scatter) 를 인식하며 , 동적으로 지정 및 Title, Series Title 수정 역시 가능합니다 .

( 단 , Template 파일 만들 때 , 반드시 차트제목 (chart title)/ 범례이름 (series title) 을 빈 문자열이라도 지정

해야 합니다 . 이유는 , 새로운 범례 (Series) 를 생성 시 기존에 만들어져 있는 양식을 복사 (clone) 하여

사용 하기 때문입니다 .)

2. 엑셀 2003 버전 (HSSF) 만 지원 .따라서 미리 , 차트를 만들 파일은 반드시 .xls 로 만들어야하며 ,

사용자에게 제공해줄 엑셀 형식도 반드시 .xls 형태로 제공할 수 밖에 없습니다 .

3.한 Sheet 당 3 만건 정도는 안정적으로 제공 .

1. POI EXCEL CHART 구현 (2)

( 문제점 )

Page 9: Excel 공통 컴포넌트

2. 결론 ..

1. POI 에서는 Chart 의 경우 , limitation 으로 지정하고 있으며 , 앞서 찾은 2 가지 방법 모두 제한적인 형태로 지원하고 있습니다 . 따라서 , 아직 Excel Chart 를 사용 하기엔 문서도 , 기능도 부족한 상황인 게 현실입니다 ..

2. 하지만 , 차트 종류별 /레이아웃 양식을 미리 만들어놓을 경우 엑셀 파일이 많이 진다 뿐이지 , 이를 조작하는 방식은 모두 동일하므로 , 큰 문제는 되지 않을 것으로 생각됩니다 .

3. 이 외 방법으로는 JFreechart, 또는 엑셀 차트를 지원하는 유료 버전이 있습니다 .

*JFreeChart LGPL.. , SX(http://www.smartxls.com)..

Page 10: Excel 공통 컴포넌트

1. JFreeChart 를 통해 자바로 이미지를 만든 후 엑셀에 삽입하는 방식입니다 .

장점으로는 2007 년 부터 꾸준히 업데이트 된 점과 , OpenSource 라는 점입니다 .

2. 하지만 , 현재 EMS 에서 fusion 차트를 이용한 방식과 동일하기 때문에 ,

이에 따른 문제점 역시 동일할 것으로 생각됩니다 ..

< 방법 >

3. JFREE CHART 대체방법 (1)

Page 11: Excel 공통 컴포넌트

3. JFREE CHART 대체방법 (1)

Page 12: Excel 공통 컴포넌트

1. 장점으로는 POI 를 이용하여 만들었기 때문에 , 사용법은 크게 다르지 않고 ,

다양한 차트 제어 기능이 가능하다는 장점이 있습니다 . 따라서 , 동적인 구조 및 차트 구현이 가능합니다 .

2. 하지만 , 생각보다 비싼 라이센스라는 점이 가장 큰 걸림돌이 될 거 같습니다 ..

Single Developer License USD $299.00**

Unlimited Developer License USD $799.00**

Single Developer Subscription Renewal License USD $119.00**

Unlimited Developer Subscription Renewal License USD $319.00**

3. SX 유료 - 대체방법 (2)

< 방법 >

Page 13: Excel 공통 컴포넌트

1) 차트의 위치를 지정 후 차트 Type 설정 .

( 지원 차트 : Column , Line, Area, Step, Bar, Combination, Pie, Doughnut, Scatter, Bubble)

//create chart with it's location

ChartShape chart = workBook.addChart(left, top, right, bottom);

chart.setChartType(ChartShape.Bar);

2) 차트의 데이터 범위를 지정 .

//link data source, link each series to columns(true to rows).

chart.setLinkRange("Sheet1!$a$1:$F$6", false);

3) 가로 /세로 축 (Axis) 설정 .

//set axis title

chart.setAxisTitle(ChartShape.XAxis, 0, "X-axis data");

chart.setAxisTitle(ChartShape.YAxis, 0, "Y-axis data");

3. SX 유료 - 대체방법 (2)

Page 14: Excel 공통 컴포넌트

1) 차트의 범례 (Series) 제목 및 차트 제목 지정가능 .

//set series name

chart.setSeriesName(0, "My Series number 1");

chart.setSeriesName(1, "My Series number 2");

chart.setSeriesName(2, "My Series number 3");

chart.setSeriesName(3, "My Series number 4");

chart.setSeriesName(4, "My Series number 5");

chart.setTitle("My Chart");

2) 차트의 레이아웃 /스타일 수정가능

//set plot area's color to darkgray

ChartFormat chartFormat = chart.getPlotFormat();

chartFormat.setSolid();

chartFormat.setForeColor(Color.red.getRGB());

chart.setPlotFormat(chartFormat);

//set series 0's color to blue

ChartFormat seriesformat = chart.getSeriesFormat(0);

seriesformat.setSolid();

seriesformat.setForeColor(Color.BLUE.getRGB());

chart.setSeriesFormat(0, seriesformat);

3. SX 유료 - 대체방법 (2)

Page 15: Excel 공통 컴포넌트

3. SX 유료 - 대체방법 (2)