java如何设置图表的文本方向以使用poi旋转所有文本?
在excel中,以下是我期望的结果,如下所示 enter image description here
在excel中,图表上有一个数据标签,显示的值默认为水平,我可以设置文本方向来旋转所有文本270中文本选项的格式数据标签。但是,我不知道如何用ApachePOI在代码中实现这一点?有人能帮忙吗
代码如下:
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);
# 1 楼答案
正如您的代码所示,您正在使用
apache poi
的底层低级bean设置数据标签但是,如何才能与这些工作?没有关于
org.openxmlformats.schemas.drawingml.x2006.chart.*
公共类的文档可用。例如,我们需要从maven下载ooxml-schemas
的源代码。然后我们可以使用javadoc
创建API
文档。现在我们可以看看如何创建和使用这些类但是我们还需要类正在创建的
XML
元素和属性的含义。为此,我们可以研究Office Open XML
规范。但是我的首选方法是使用Excel
的GUI
创建一个简单的*.xlsx
文件,该文件具有所需的设置。然后解压该*.xlsx
文件并查看存储在该ZIP
存档中的*.xml
文件中的XML
。对于第一个图表,这是/xl/charts/chart1.xml
我们将发现:
用于设置文字旋转时的数据标签
这是
dLbls
中的txPr
(文本属性)元素,其bodyPr
(主体属性)元素具有rot
属性集。rot
属性的值是旋转角度*60000。例如,-5400000是-90.00*60000。还有一个p
(段落)元素,它有一个pPr
(段落属性)元素,它有一个defRPr
(默认运行属性),用于设置数据标签文本运行具有默认属性将
apache poi
中使用的所有代码放在一起可以是:其中
plotArea
与代码中的CTPlotArea
相同。并且第一个系列必须使用addNewDLbls
设置dLbls
,就像您在代码中所做的那样