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);
コメント