aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlain Béarez <abearez@apache.org>2018-10-05 14:36:18 +0000
committerAlain Béarez <abearez@apache.org>2018-10-05 14:36:18 +0000
commitcffa31ed62836e89e3cc392190850fc6cfb71015 (patch)
tree65b3b57e50b709e6ae22a4875c9a7644b72e27be
parentf446df6f6647e765970e5074b8429856cf5cbffe (diff)
downloadpoi-cffa31ed62836e89e3cc392190850fc6cfb71015.tar.gz
poi-cffa31ed62836e89e3cc392190850fc6cfb71015.zip
example from StackOverflow question 47065690
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1842925 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r--src/examples/src/org/apache/poi/xssf/usermodel/examples/BarAndLineChart.java164
-rw-r--r--src/ooxml/java/org/apache/poi/xddf/usermodel/chart/XDDFDateAxis.java13
-rw-r--r--src/ooxml/java/org/apache/poi/xddf/usermodel/chart/XDDFSeriesAxis.java13
-rw-r--r--src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFChart.java2
-rw-r--r--src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFChart.java14
5 files changed, 192 insertions, 14 deletions
diff --git a/src/examples/src/org/apache/poi/xssf/usermodel/examples/BarAndLineChart.java b/src/examples/src/org/apache/poi/xssf/usermodel/examples/BarAndLineChart.java
new file mode 100644
index 0000000000..13d4ff654c
--- /dev/null
+++ b/src/examples/src/org/apache/poi/xssf/usermodel/examples/BarAndLineChart.java
@@ -0,0 +1,164 @@
+/*
+ * ====================================================================
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ====================================================================
+ */
+
+package org.apache.poi.xssf.usermodel.examples;
+
+import java.io.FileOutputStream;
+import java.util.Random;
+
+import org.apache.poi.ss.util.CellRangeAddress;
+import org.apache.poi.ss.util.CellReference;
+import org.apache.poi.xddf.usermodel.PresetColor;
+import org.apache.poi.xddf.usermodel.XDDFColor;
+import org.apache.poi.xddf.usermodel.XDDFLineProperties;
+import org.apache.poi.xddf.usermodel.XDDFShapeProperties;
+import org.apache.poi.xddf.usermodel.XDDFSolidFillProperties;
+import org.apache.poi.xddf.usermodel.chart.AxisCrosses;
+import org.apache.poi.xddf.usermodel.chart.AxisPosition;
+import org.apache.poi.xddf.usermodel.chart.BarDirection;
+import org.apache.poi.xddf.usermodel.chart.ChartTypes;
+import org.apache.poi.xddf.usermodel.chart.LegendPosition;
+import org.apache.poi.xddf.usermodel.chart.XDDFBarChartData;
+import org.apache.poi.xddf.usermodel.chart.XDDFCategoryAxis;
+import org.apache.poi.xddf.usermodel.chart.XDDFCategoryDataSource;
+import org.apache.poi.xddf.usermodel.chart.XDDFChartData;
+import org.apache.poi.xddf.usermodel.chart.XDDFChartLegend;
+import org.apache.poi.xddf.usermodel.chart.XDDFDataSourcesFactory;
+import org.apache.poi.xddf.usermodel.chart.XDDFLineChartData;
+import org.apache.poi.xddf.usermodel.chart.XDDFNumericalDataSource;
+import org.apache.poi.xddf.usermodel.chart.XDDFValueAxis;
+import org.apache.poi.xssf.usermodel.XSSFCell;
+import org.apache.poi.xssf.usermodel.XSSFChart;
+import org.apache.poi.xssf.usermodel.XSSFClientAnchor;
+import org.apache.poi.xssf.usermodel.XSSFDrawing;
+import org.apache.poi.xssf.usermodel.XSSFRow;
+import org.apache.poi.xssf.usermodel.XSSFSheet;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+
+public class BarAndLineChart {
+ private static final int NUM_OF_ROWS = 7;
+ private static final Random RNG = new Random();
+
+ public static void main(String[] args) throws Exception {
+ try (XSSFWorkbook wb = new XSSFWorkbook()) {
+ XSSFSheet sheet = wb.createSheet("Sheet1");
+
+ XSSFRow row = sheet.createRow(0);
+ row.createCell(0);
+ row.createCell(1).setCellValue("Bars");
+ row.createCell(2).setCellValue("Lines");
+
+ XSSFCell cell;
+ for (int r = 1; r < NUM_OF_ROWS; r++) {
+ row = sheet.createRow(r);
+ cell = row.createCell(0);
+ cell.setCellValue("C" + r);
+ cell = row.createCell(1);
+ cell.setCellValue(RNG.nextDouble());
+ cell = row.createCell(2);
+ cell.setCellValue(RNG.nextDouble() * 10);
+ }
+
+ XSSFDrawing drawing = sheet.createDrawingPatriarch();
+ XSSFClientAnchor anchor = drawing.createAnchor(0, 0, 0, 0, 4, 0, 11, 15);
+
+ XSSFChart chart = drawing.createChart(anchor);
+
+ // the data sources
+ XDDFCategoryDataSource xs = XDDFDataSourcesFactory.fromStringCellRange(sheet,
+ new CellRangeAddress(1, NUM_OF_ROWS - 1, 0, 0));
+ XDDFNumericalDataSource<Double> ys1 = XDDFDataSourcesFactory.fromNumericCellRange(sheet,
+ new CellRangeAddress(1, NUM_OF_ROWS - 1, 1, 1));
+ XDDFNumericalDataSource<Double> ys2 = XDDFDataSourcesFactory.fromNumericCellRange(sheet,
+ new CellRangeAddress(1, NUM_OF_ROWS - 1, 2, 2));
+
+ // cat axis 1 (bars)
+ XDDFCategoryAxis barCategories = chart.createCategoryAxis(AxisPosition.BOTTOM);
+
+ // val axis 1 (left)
+ XDDFValueAxis leftValues = chart.createValueAxis(AxisPosition.LEFT);
+ leftValues.crossAxis(barCategories);
+ barCategories.crossAxis(leftValues);
+
+ // cat axis 2 (lines)
+ XDDFCategoryAxis lineCategories = chart.createCategoryAxis(AxisPosition.BOTTOM);
+ lineCategories.setVisible(false); // this cat axis is deleted
+
+ // val axis 2 (right)
+ XDDFValueAxis rightValues = chart.createValueAxis(AxisPosition.RIGHT);
+ // this value axis crosses its category axis at max value
+ rightValues.setCrosses(AxisCrosses.MAX);
+ rightValues.crossAxis(lineCategories);
+ lineCategories.crossAxis(rightValues);
+
+ // the bar chart
+ XDDFBarChartData bar = (XDDFBarChartData) chart.createData(ChartTypes.BAR, lineCategories, rightValues);
+ XDDFBarChartData.Series series1 = (XDDFBarChartData.Series) bar.addSeries(xs, ys1);
+ series1.setTitle("Bars", new CellReference("Sheet1!$B$1"));
+ bar.setVaryColors(true);
+ bar.setBarDirection(BarDirection.COL);
+ chart.plot(bar);
+
+ // the line chart
+ XDDFLineChartData lines = (XDDFLineChartData) chart.createData(ChartTypes.LINE, lineCategories,
+ rightValues);
+ XDDFLineChartData.Series series2 = (XDDFLineChartData.Series) lines.addSeries(xs, ys2);
+ series2.setTitle("Lines", new CellReference("Sheet1!$C$1"));
+ lines.setVaryColors(true);
+ chart.plot(lines);
+
+ // some colors
+ solidFillSeries(bar, 0, PresetColor.CHARTREUSE);
+ solidLineSeries(lines, 0, PresetColor.TURQUOISE);
+
+ // legend
+ XDDFChartLegend legend = chart.getOrAddLegend();
+ legend.setPosition(LegendPosition.BOTTOM);
+ legend.setOverlay(false);
+
+ try (FileOutputStream fileOut = new FileOutputStream("BarAndLineChart.xlsx")) {
+ wb.write(fileOut);
+ }
+ }
+ }
+
+ private static void solidFillSeries(XDDFChartData data, int index, PresetColor color) {
+ XDDFSolidFillProperties fill = new XDDFSolidFillProperties(XDDFColor.from(color));
+ XDDFChartData.Series series = data.getSeries().get(index);
+ XDDFShapeProperties properties = series.getShapeProperties();
+ if (properties == null) {
+ properties = new XDDFShapeProperties();
+ }
+ properties.setFillProperties(fill);
+ series.setShapeProperties(properties);
+ }
+
+ private static void solidLineSeries(XDDFChartData data, int index, PresetColor color) {
+ XDDFSolidFillProperties fill = new XDDFSolidFillProperties(XDDFColor.from(color));
+ XDDFLineProperties line = new XDDFLineProperties();
+ line.setFillProperties(fill);
+ XDDFChartData.Series series = data.getSeries().get(index);
+ XDDFShapeProperties properties = series.getShapeProperties();
+ if (properties == null) {
+ properties = new XDDFShapeProperties();
+ }
+ properties.setLineProperties(line);
+ series.setShapeProperties(properties);
+ }
+}
diff --git a/src/ooxml/java/org/apache/poi/xddf/usermodel/chart/XDDFDateAxis.java b/src/ooxml/java/org/apache/poi/xddf/usermodel/chart/XDDFDateAxis.java
index bde26ffb7e..b0a1e1031b 100644
--- a/src/ooxml/java/org/apache/poi/xddf/usermodel/chart/XDDFDateAxis.java
+++ b/src/ooxml/java/org/apache/poi/xddf/usermodel/chart/XDDFDateAxis.java
@@ -82,6 +82,19 @@ public class XDDFDateAxis extends XDDFChartAxis {
return new XDDFShapeProperties(properties);
}
+ /**
+ * @since 4.0.1
+ */
+ @Override
+ public void setTitle(String text) {
+ if (!ctDateAx.isSetTitle()) {
+ ctDateAx.addNewTitle();
+ }
+ XDDFTitle title = new XDDFTitle(null, ctDateAx.getTitle());
+ title.setOverlay(false);
+ title.setText(text);
+ }
+
@Override
public boolean isSetMinorUnit() {
return ctDateAx.isSetMinorUnit();
diff --git a/src/ooxml/java/org/apache/poi/xddf/usermodel/chart/XDDFSeriesAxis.java b/src/ooxml/java/org/apache/poi/xddf/usermodel/chart/XDDFSeriesAxis.java
index 37ec0ddab3..5e555335b0 100644
--- a/src/ooxml/java/org/apache/poi/xddf/usermodel/chart/XDDFSeriesAxis.java
+++ b/src/ooxml/java/org/apache/poi/xddf/usermodel/chart/XDDFSeriesAxis.java
@@ -79,6 +79,19 @@ public class XDDFSeriesAxis extends XDDFChartAxis {
return new XDDFShapeProperties(properties);
}
+ /**
+ * @since 4.0.1
+ */
+ @Override
+ public void setTitle(String text) {
+ if (!ctSerAx.isSetTitle()) {
+ ctSerAx.addNewTitle();
+ }
+ XDDFTitle title = new XDDFTitle(null, ctSerAx.getTitle());
+ title.setOverlay(false);
+ title.setText(text);
+ }
+
@Override
public boolean isSetMinorUnit() {
return false;
diff --git a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFChart.java b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFChart.java
index d2ce338787..8e6612f875 100644
--- a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFChart.java
+++ b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFChart.java
@@ -69,7 +69,7 @@ public final class XSLFChart extends XDDFChart {
return XSLFFactory.getInstance();
}
- public XSLFTextShape getTitle() {
+ public XSLFTextShape getTitleShape() {
if (!chart.isSetTitle()) {
chart.addNewTitle();
}
diff --git a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFChart.java b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFChart.java
index dc1ef9f2eb..d7971839f5 100644
--- a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFChart.java
+++ b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFChart.java
@@ -262,19 +262,6 @@ public final class XSSFChart extends XDDFChart implements Chart, ChartAxisFactor
/**
* Returns the title static text, or null if none is set. Note that a title
- * formula may be set instead.
- *
- * @return static title text, if set
- * @deprecated POI 3.16, use {@link #getTitleText()} instead.
- */
- @Deprecated
- @Removal(version = "4.0")
- public XSSFRichTextString getTitle() {
- return getTitleText();
- }
-
- /**
- * Returns the title static text, or null if none is set. Note that a title
* formula may be set instead. Empty text result is for backward
* compatibility, and could mean the title text is empty or there is a
* formula instead. Check for a formula first, falling back on text for
@@ -313,6 +300,7 @@ public final class XSSFChart extends XDDFChart implements Chart, ChartAxisFactor
* @param newTitle
* to use
*/
+ @Override
public void setTitleText(String newTitle) {
CTTitle ctTitle;
if (chart.isSetTitle()) {