Apache POI を使ってエクセルの資料を作成してるんだけど、
テンプレートとなるグラフをコピーして参照データのセルとか
だけ変えたかったので、その方法をメモメモ
情報が少なくて苦労したけど
実際の手順は意外とシンプルだった
XSSFSheet sheet = (XSSFSheet) workbook.getSheet("sheet1");
XSSFDrawing drawing = sheet.createDrawingPatriarch();
// テンプレートとなるグラフ
List<XSSFChart> chartTmp = drawing.getCharts();
// 作成するグラフの挿入場所 offsetの単位はピクセル数x9525?
XSSFClientAnchor anchor = drawing.createAnchor(1*9525, 0, 0, 0, 0, 0, 10, 10);
// グラフ作成
XSSFChart chart = drawing.createChart(anchor);
// 作成したグラフにテンプレートをインポート
chart.importContent(chartTmp);
CTChart cct = chart.getCTChart();
CTPlotArea pa = cct.getPlotArea();
// 既存のSERIES(系列)の参照値のみ変更したい場合
for (CTLineChart clc : pa.getLineChartList()) {
int i = 0;
for (CTLineSer cls : clc.getSerList()) {
cls.getCat().getStrRef().setF("sheet1!$D$10:$I$10");
cls.getVal().getNumRef().setF("sheet1!$D$"+(10+i)+":$I$"+(10+i));
i++;
}
}
// SERIES(系列)を追加したい場合
CTLineChart clc = pa.getLineChartArray(0);
CTLineSer cls = clc.addNewSer();
cls.addNewTx().addNewStrRef().setF("sheet1!$E$11");
// ctLineSer.addNewIdx().setVal(2); //2= Color Grey
cls.addNewCat().addNewStrRef().setF("sheet1!$D$10:$I$10");
cls.addNewVal().addNewNumRef().setF("sheet1!$D$11:$I$11");
cls.addNewSmooth().setVal(false);

コメント