Я пишу код, который создает две диаграммы пончиков в файле Excel. Первый график имеет 10 меток, а второй диаграмма имеет 2 метки. Я хочу, чтобы в якоре выровнялись обе диаграммы. Но из -за немногих метки и значения его позиции в якоре изменяется вертикально. Но положение второй диаграммы по вертикали, так как в ней есть только две метки.public String picChart9() throws IOException {
try (XSSFWorkbook wb = new XSSFWorkbook()) {
XSSFSheet sheet = wb.createSheet("doughnutChart");
sheet.setDisplayGridlines(false);
final int NUM_OF_ROWS = 2;
final int NUM_OF_COLUMNS = 10;
XSSFDrawing drawing = sheet.createDrawingPatriarch();
XSSFClientAnchor anchor1 = drawing.createAnchor(0, 0, 0, 0, 1, 5, 4, 28);
// anchor1.setAnchorType(ClientAnchor.AnchorType.DONT_MOVE_AND_RESIZE);
XSSFClientAnchor anchor2 = drawing.createAnchor(0, 0, 0, 0, 4, 5, 7, 28);
// anchor2.setAnchorType(ClientAnchor.AnchorType.DONT_MOVE_AND_RESIZE);
XSSFChart chart1 = drawing.createChart(anchor1);
chart1.setTitleText("chart1");
chart1.setTitleOverlay(false);
//chart1.createValueAxis(AxisPosition.TOP);
XSSFChart chart2 = drawing.createChart(anchor2);
chart2.setTitleText("chart2");
chart2.setTitleOverlay(false);
//chart2.createValueAxis(AxisPosition.LEFT);
/**/
System.out.println("chart1.getCTChart() --:"+chart1.getCTChart());
System.out.println("chart1.getAxes() --:"+chart1.getAxes());
System.out.println("chart2.getAxes() --:"+chart2.getAxes());
/**/
XDDFChartLegend legend1 = chart1.getOrAddLegend();
legend1.setPosition(LegendPosition.BOTTOM);
XDDFChartLegend legend2 = chart2.getOrAddLegend();
legend2.setPosition(LegendPosition.BOTTOM);
String[] stringArray1 = new String[]{"one","two","three","four","five","six","seven","eight","nine","ten"};
XDDFDataSource stringValue1 = XDDFDataSourcesFactory.fromArray(stringArray1);
Long[] longArray1 = new Long[]{ 11L,2L,3L,4L,5L,6L,7L,8L,9L,10L };
XDDFNumericalDataSource longValue1 = XDDFDataSourcesFactory.fromArray(longArray1);
String[] stringArray2 = new String[]{"one","two"};
XDDFDataSource stringValue2 = XDDFDataSourcesFactory.fromArray(stringArray2);
Long[] longArray2 = new Long[]{ 60L,40L };
XDDFNumericalDataSource longValue2 = XDDFDataSourcesFactory.fromArray(longArray2);
XDDFDoughnutChartData data1 = new XDDFDoughnutChartData(chart1, chart1.getCTChart().getPlotArea().addNewDoughnutChart());
data1.setVaryColors(true);
data1.setHoleSize((short) 50);
data1.setFirstSliceAngle(10);
XDDFDoughnutChartData data2 = new XDDFDoughnutChartData(chart2, chart2.getCTChart().getPlotArea().addNewDoughnutChart());
data2.setVaryColors(true);
data2.setHoleSize((short) 50);
data2.setFirstSliceAngle(10);
XDDFChartData.Series series1 = data1.addSeries(stringValue1, longValue1);
XDDFChartData.Series series2 = data2.addSeries(stringValue2, longValue2);
// Remove the Anchore border line
(chart1).getCTChartSpace().addNewSpPr().addNewLn().addNewNoFill();
(chart2).getCTChartSpace().addNewSpPr().addNewLn().addNewNoFill();
// Data point colors; is necessary for showing data points in Calc
// Add data labels-Chart-1
if (!chart1.getCTChart().getPlotArea().getDoughnutChartArray(0).getSerArray(0).isSetDLbls()) {
chart1.getCTChart().getPlotArea().getDoughnutChartArray(0).getSerArray(0).addNewDLbls();
}
chart1.getCTChart().getPlotArea().getDoughnutChartArray(0).getSerArray(0).getDLbls().addNewShowVal().setVal(true);
chart1.getCTChart().getPlotArea().getDoughnutChartArray(0).getSerArray(0).getDLbls().addNewShowSerName().setVal(false);
chart1.getCTChart().getPlotArea().getDoughnutChartArray(0).getSerArray(0).getDLbls().addNewShowCatName().setVal(false);
chart1.getCTChart().getPlotArea().getDoughnutChartArray(0).getSerArray(0).getDLbls().addNewShowPercent().setVal(false);
chart1.getCTChart().getPlotArea().getDoughnutChartArray(0).getSerArray(0).getDLbls().addNewShowLegendKey().setVal(false);
chart1.getCTChart().getPlotArea().getDoughnutChartArray(0).getSerArray(0).getDLbls().addNewNumFmt();
chart1.getCTChart().getPlotArea().getDoughnutChartArray(0).getSerArray(0).getDLbls().getNumFmt().setSourceLinked(false);
chart1.getCTChart().getPlotArea().getDoughnutChartArray(0).getSerArray(0).getDLbls().getNumFmt().setFormatCode("#,##0.00");
// Add data labels-Chart-2
if (!chart2.getCTChart().getPlotArea().getDoughnutChartArray(0).getSerArray(0).isSetDLbls()) {
chart2.getCTChart().getPlotArea().getDoughnutChartArray(0).getSerArray(0).addNewDLbls();
}
chart2.getCTChart().getPlotArea().getDoughnutChartArray(0).getSerArray(0).getDLbls().addNewShowVal().setVal(true);
chart2.getCTChart().getPlotArea().getDoughnutChartArray(0).getSerArray(0).getDLbls().addNewShowSerName().setVal(false);
chart2.getCTChart().getPlotArea().getDoughnutChartArray(0).getSerArray(0).getDLbls().addNewShowCatName().setVal(false);
chart2.getCTChart().getPlotArea().getDoughnutChartArray(0).getSerArray(0).getDLbls().addNewShowPercent().setVal(false);
chart2.getCTChart().getPlotArea().getDoughnutChartArray(0).getSerArray(0).getDLbls().addNewShowLegendKey().setVal(false);
chart2.getCTChart().getPlotArea().getDoughnutChartArray(0).getSerArray(0).getDLbls().addNewNumFmt();
chart2.getCTChart().getPlotArea().getDoughnutChartArray(0).getSerArray(0).getDLbls().getNumFmt().setSourceLinked(false);
chart2.getCTChart().getPlotArea().getDoughnutChartArray(0).getSerArray(0).getDLbls().getNumFmt().setFormatCode("#,##0.00");
//plot chart
chart1.plot(data1);
chart2.plot(data2);
// Write the output to a file
try (FileOutputStream fileOut = new FileOutputStream("picChart9.xlsx")) {
wb.write(fileOut);
}
}
return null;
}
< /code>
Я использую код, показанный выше. < /p>
Спасибо. Пожалуйста, дайте мне знать, если мои проблемы не ясны.
Подробнее здесь: https://stackoverflow.com/questions/774 ... -are-added