gpt4 book ai didi

java - 如何使用 poi 设置图表的文本方向以将所有文本旋转 270?

转载 作者:太空宇宙 更新时间:2023-11-04 09:30:36 32 4
gpt4 key购买 nike

在excel中,这是我期望的,如下所示 enter image description here

在Excel中,图表上有一个数据标签,显示的值默认为水平,我可以在格式数据标签的文本选项中设置文本方向将所有文本旋转270。但是,我不知道如何使用 apache poi 在代码中实现这一点?有人可以帮忙吗?

这是代码:

    XSSFDrawing drawing = (XSSFDrawing)sheet.createDrawingPatriarch();
XSSFClientAnchor anchor = drawing.createAnchor(0, 0, 0, 0, 0, 4, 27, 5);
XSSFChart chart = drawing.createChart(anchor);

XDDFCategoryAxis bottomAxis = chart.createCategoryAxis(AxisPosition.BOTTOM);
bottomAxis.setTitle("Week");
XDDFValueAxis leftAxis = chart.createValueAxis(AxisPosition.LEFT);
leftAxis.setTitle("Face Amount ($MM)");
leftAxis.setCrossBetween(AxisCrossBetween.BETWEEN);
leftAxis.setMaximum(10000);

XDDFDataSource<Double> xs = XDDFDataSourcesFactory.fromNumericCellRange((XSSFSheet) sheet,
new CellRangeAddress(299, 299, 0, NUM_OF_COLUMNS - 1));
XDDFNumericalDataSource<Double> ys = XDDFDataSourcesFactory.fromNumericCellRange((XSSFSheet) sheet,
new CellRangeAddress(300, 300, 0, NUM_OF_COLUMNS - 1));

XDDFChartData data = chart.createData(ChartTypes.BAR, bottomAxis, leftAxis);
XDDFChartData.Series series1 = data.addSeries(xs, ys);
series1.setTitle("2x", null);

chart.plot(data);

XDDFBarChartData bar = (XDDFBarChartData) data;
bar.setBarDirection(BarDirection.COL);
bar.setGapWidth(3);
bar.setBarGrouping(BarGrouping.STACKED);

//set data labels
XSSFChart xssfChart = (XSSFChart) chart;
CTPlotArea plotArea = xssfChart.getCTChart().getPlotArea();
CTBoolean ctBool = CTBoolean.Factory.newInstance();
ctBool.setVal(true);
plotArea.getBarChartArray(0).getSerArray(0).addNewDLbls().setShowVal(ctBool);
plotArea.getBarChartArray(0).getSerArray(0).getDLbls().addNewShowLeaderLines();
plotArea.getBarChartArray(0).getSerArray(0).getDLbls().setShowLeaderLines(ctBool);
ctBool.setVal(false);
plotArea.getBarChartArray(0).getSerArray(0).getDLbls().setShowSerName(ctBool);
plotArea.getBarChartArray(0).getSerArray(0).getDLbls().setShowPercent(ctBool);
plotArea.getBarChartArray(0).getSerArray(0).getDLbls().setShowLegendKey(ctBool);
plotArea.getBarChartArray(0).getSerArray(0).getDLbls().setShowCatName(ctBool);
plotArea.getBarChartArray(0).getSerArray(0).getDLbls().setShowLeaderLines(ctBool);
plotArea.getBarChartArray(0).getSerArray(0).getDLbls().setShowBubbleSize(ctBool);

最佳答案

正如您的代码所示,您正在使用 apache poi 的底层低级 bean 设置数据标签。 。

但是如何使用这些呢?没有关于 org.openxmlformats.schemas.drawingml.x2006.chart.* 的文档公开类(class)。所以我们需要下载ooxml-schemas的源码来自maven例如。然后我们可以使用javadoc创建 API文档。现在我们可以看看如何创建和使用这些类。

但我们还需要 XML 的含义元素和属性,类正在创建。为此,可以研究Office Open XML规范。但我首选的方法是创建一个简单的 *.xlsx使用 Excel 具有所需设置的文件的GUI 。然后解压*.xlsx文件并查看 XML*.xml文件存储在 ZIP文件。对于第一个图表,这是 /xl/charts/chart1.xml .

这样做我们会发现:

<c:dLbls>
<c:txPr>
<a:bodyPr rot="-5400000"/>
<a:p><a:pPr><a:defRPr/></a:pPr></a:p>
</c:txPr>
...
</c:dLbls>

设置文本旋转时的数据标签。

这是一个txPr (文本属性) dLbls 中的元素有一个bodyPr (主体属性)具有 rot 的元素属性集。 rot的值属性是旋转角度* 60000。例如-5400000是-90.00 * 60000。还有p (段落)元素具有 pPr (段落属性)具有 defRPr 的元素(默认运行属性)设置数据标签文本运行具有默认属性。

apache poi 中使用的所有代码放在一起因为这将是:

...
// text properties having rotation set
plotArea.getBarChartArray(0).getSerArray(0).getDLbls().addNewTxPr()
.addNewBodyPr().setRot((int)(-90.00 * 60000));
// paragraph properties having default run properties set
plotArea.getBarChartArray(0).getSerArray(0).getDLbls().getTxPr()
.addNewP().addNewPPr().addNewDefRPr();
...

哪里plotAreaCTPlotArea就像你的代码中一样。而第一个系列必须有dLbls使用 addNewDLbls 设置正如您在代码中所做的那样。

关于java - 如何使用 poi 设置图表的文本方向以将所有文本旋转 270?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57138805/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com