Java 如何使用Apache POI 4.1.2在XSSFChart中仅设置绘图区域高度

Java 如何使用Apache POI 4.1.2在XSSFChart中仅设置绘图区域高度,java,xssf,apache-poi-4,Java,Xssf,Apache Poi 4,我使用模板文件创建了一个堆叠条形图。在我的图表中,有一个系列和100多个传说。为了显示所有图例,我调整了绘图区域Y轴的值,现在条形图的大小比预期的大。是否有任何方法调整绘图区域高度? int additionalRows=barCount*barSize; additionalRows=additionalRows+(addressList.size()/3); chart=graphSheet.createDrawingPachura().createChart(新的XSSFClientAn

我使用模板文件创建了一个堆叠条形图。在我的图表中,有一个系列和100多个传说。为了显示所有图例,我调整了绘图区域Y轴的值,现在条形图的大小比预期的大。是否有任何方法调整绘图区域高度?

int additionalRows=barCount*barSize;
additionalRows=additionalRows+(addressList.size()/3);
chart=graphSheet.createDrawingPachura().createChart(新的XSSFClientAnchor(1001001001001,currentIndex,2,currentIndex+=additionalRows));
XSSFChart stackedFullBarChart=templateSheet.getDrawingPachura().getCharts().get(ChartType.STACKED_FULL_CHART.getValue());
图表。进口内容(堆叠完整条形图);
图表.setTitleText(标题);
XDDFChartData chartData=chart.getChartSeries().get(0);
XDDFDataSource category=XDDFDataSourcesFactory.fromStringCellRange(数据表,类别单元格);
对于(int i=0;i=chartData.getSeriesCount()){
XDDFChartData.Series系列1=chartData.addSeries(类别、值);
series1.setTitle(seriesName,新单元格引用(seriesNameCell));
}否则{
getSeries(i).setTitle(seriesName,新单元格引用(seriesNameCell));
getSeries(i).replaceData(类别、值);
}
}
图表.GetOradManualLayout().setWidthRatio(0.8);
**图表.GetOradManualLayout().setHeightRatio(0.9);
chart.getOrAddManualLayout().setY(1.1)**
图表.绘图(图表数据);
chart.getOrAddLegend().setPosition(LegendPosition.TOP);
CTLegend CTLegend=chart.getCTChart().addNewLegend();
ctLegend.addNewLegendPos().setVal(STLegendPos.T);
CTBoolean=CTBoolean.Factory.newInstance();
ctBoolean.setVal(false);
ctLegend.setOverlay(ctBoolean);
CTDouble-CTDouble=CTDouble.Factory.newInstance();
ctdouble.setVal(0.1);
chart.getCTChart().getPlotArea().getLayout().getManualLayout().setH(ctdouble);
预期输出:

         int additionalRows = barCount * barSize;
         additionalRows = additionalRows + (addressList.size()/3);
         chart = graphSheet.createDrawingPatriarch().createChart(new XSSFClientAnchor(100, 100, 100, 100, 1, currentIndex, 2, currentIndex+= additionalRows));
         XSSFChart stackedFullBarChart = templateSheet.getDrawingPatriarch().getCharts().get(ChartType.STACKED_FULL_CHART.getValue());
         chart.importContent(stackedFullBarChart);

         chart.setTitleText(title);
         XDDFChartData chartData = chart.getChartSeries().get(0);
         XDDFDataSource<?> category = XDDFDataSourcesFactory.fromStringCellRange(dataSheet, categoryCells);
         for (int i = 0; i < addressList.size(); i++) {
            XDDFNumericalDataSource<?> values = XDDFDataSourcesFactory.fromNumericCellRange(dataSheet, addressList.get(i));
            int seriesNameRow = addressList.get(i).getFirstRow() - 2;
            int seriesNameCol = addressList.get(i).getFirstColumn();
            XSSFCell seriesNameCell = dataSheet.getRow(seriesNameRow).getCell(seriesNameCol);
            String seriesName = seriesNameCell.getStringCellValue();
            if (i >= chartData.getSeriesCount()) {
                XDDFChartData.Series series1 = chartData.addSeries(category, values);
                series1.setTitle(seriesName, new CellReference(seriesNameCell));
            } else {
                chartData.getSeries(i).setTitle(seriesName, new CellReference(seriesNameCell));
                chartData.getSeries(i).replaceData(category, values);
            }
        }
        chart.getOrAddManualLayout().setWidthRatio(0.8);
        **chart.getOrAddManualLayout().setHeightRatio(0.9);
        chart.getOrAddManualLayout().setY(1.1);**
        chart.plot(chartData);

        chart.getOrAddLegend().setPosition(LegendPosition.TOP);
        CTLegend ctLegend = chart.getCTChart().addNewLegend();
        ctLegend.addNewLegendPos().setVal(STLegendPos.T);
        CTBoolean ctBoolean = CTBoolean.Factory.newInstance();
        ctBoolean.setVal(false);
        ctLegend.setOverlay(ctBoolean);
        CTDouble ctdouble = CTDouble.Factory.newInstance();
        ctdouble.setVal(0.1);
        chart.getCTChart().getPlotArea().getLayout().getManualLayout().setH(ctdouble);