我想使用apache poi库创建“堆积条形图”。需要一些文档。
row1 = worksheet.createRow(r);
row['data'].flatten.each_with_index do |data, index|
cell = row1.createCell(index);
cell.setCellValue(data);
end
drawing = worksheet.createDrawingPatriarch();
anchor = drawing.createAnchor(0, 0, 0, 0, 0, 5, 8, 20);
chart = drawing.createChart(anchor);
ctChart = chart.getCTChart();
ctPlotArea = ctChart.getPlotArea();
ctBarChart = ctPlotArea.addNewBarChart();
ctBoolean = ctBarChart.addNewVaryColors();
ctBoolean.setVal(true);
ctBarChart.addNewBarDir().setVal(STBarDir.BAR);
ctBarChart.addNewGrouping().setVal(STBarGrouping.STACKED);
ctBarSer = ctBarChart.addNewSer();
ctSerTx = ctBarSer.addNewTx();
ctStrRef = ctSerTx.addNewStrRef();
ctStrRef.setF("Sheet1!$A$#{r+1}");
ctBarSer.addNewIdx().setVal(r+1);
cttAxDataSource = ctBarSer.addNewCat();
ctStrRef = cttAxDataSource.addNewStrRef();
length = row['data'].flatten.length
ctStrRef.setF("Sheet1!$B$#{r+1}:$#{CellReference.convertNumToColString(length-1)}$#{r + 1}");
ctNumDataSource = ctBarSer.addNewVal();
ctNumRef = ctNumDataSource.addNewNumRef();
ctNumRef.setF("Sheet1!$B$#{r+1}:$#{CellReference.convertNumToColString(length-1)}$#{r+1}");
ctBarSer.addNewSpPr().addNewLn().addNewSolidFill().addNewSrgbClr().setVal([0,0,0]);
使用上面的代码我得到条形图,但需要转换为堆积条形图。
{{3}}
答案 0 :(得分:2)
虽然我无法准确地告诉您使图表工作的神奇咒语,但我可以帮助您解决问题。
如果POI不支持您要创建的图表类型。您将不得不手动创建它。看起来你有一个良好的开端。您可以在http://www.ecma-international.org/publications/standards/Ecma-376.htm找到规范文档。 POI使用规范的第1版。
虽然这些文档非常好,但您可能需要一些帮助来确定如何构建XML。我的方法是使用Excel或Word创建一个简单的文档,然后将保存的文档重命名为*.zip
。现在,您可以使用Notepad ++或其他一些查看器检查xml包。
一旦您使用POI生成了某些内容,您还可以以类似的方式查看生成的XML,以查看结果与预期不符的差异。