主要概念
XSSFChart是代表Excel中的图表对象。 ChartBuilder是用于向XSSFChart中填充数据的构建器,有很多子类:
1) ChartFromArrayBuilder用于从一个固定的数组来创建数据;
2) ChartFromCellRangeBuilder用于从一个Excel表指定范围来创建数据;
创建Chart
XSSFChart chart = ExcelHelpers.createChart(sheet,0, 5, 7, 26);//在sheet上创建一个图表对象,显示到左上角坐标为(col1,row1)、右下角坐标为(col2,row2)这个位置。
chart.setTitleText("销售龙虎榜");
chart.getOrAddLegend().setPosition(LegendPosition.LEFT);
Builder
ChartFromArrayBuilder<Double> chartBuilder = new ChartFromArrayBuilder<>(ChartTypes.LINE);
泛型的类型为数据的类型, ChartTypes为图表的类型:LINE 折线图; LINE3D立体 折线图;BAR条形图;BAR3D 立体条形图;PIE 饼状图;PIE3D立体饼状图;RADAR 雷达图;SCATTER散点图等。
填充数据
String[] monthNames = {"一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"};
Double[] sales1 = {3.1,5.2,8.0,9.0,3.0,5.0,8.0,9.0,3.0,5.0,8.0,0.9};
Double[] sales2={5.0,81.0,4.0,9.8,1.8,3.9,5.8,81.8,4.8,9.8,1.8,3.9}; chartBuilder.setCategoryNames(monthNames)
.putValues("小王",sales1)
.putValues("小李",sales2)
.setCategoryAxisTitle("月份")
.setValueAxisTitle("销量")
.build(chart);
报错了Category and values must have the same point count、类别跟值应该一样。三个月份应该有三个值,我的值太多了
package Part4;
import com.yzk18.commons.DesktopHelpers;
import com.yzk18.docs.ChartFromArrayBuilder;
import com.yzk18.docs.ExcelHelpers;
import org.apache.poi.xddf.usermodel.chart.ChartTypes;
import org.apache.poi.xddf.usermodel.chart.LegendPosition;
import org.apache.poi.xssf.usermodel.XSSFChart;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
public class ChartTest1 {
public static void main(String[] args) {
XSSFWorkbook wb = ExcelHelpers.createXLSX();
XSSFSheet sheet=wb.createSheet();
XSSFChart chart = ExcelHelpers.createChart(sheet, 0, 0, 10, 20);//指定坐标
ChartFromArrayBuilder<Double> chartBuilder=new ChartFromArrayBuilder<>(ChartTypes.LINE);//类型
chart.setTitleText("月报表");//标题
//chart.getOrAddLegend().setPosition(LegendPosition.RIGHT);
String[] names=new String[]{"一月份","二月份","三月份"};
Double[] sales1=new Double[]{3.0,5.0,9.0};
Double[] sales2=new Double[]{3.2,2.4,12.0};
chartBuilder.setCategoryNames(names);//横坐标
chartBuilder.putValues("张三",sales1);//指定数据
chartBuilder.putValues("李四",sales2);
chartBuilder.setCategoryAxisTitle("销售额");//指定横纵坐标标题
chartBuilder.setValueAxisTitle("月份");
chartBuilder.build(chart);//填充到chart中
//chartBuilder.putValues()
ExcelHelpers.saveToFile(wb,"d:/temp/wb.xlsx");
ExcelHelpers.close(wb);
DesktopHelpers.openFile("d:/temp/wb.xlsx");
}
}
package Part4;
import com.yzk18.commons.CommonHelpers;
import com.yzk18.commons.DesktopHelpers;
import com.yzk18.docs.ChartFromArrayBuilder;
import com.yzk18.docs.ExcelHelpers;
import org.apache.poi.xddf.usermodel.chart.ChartTypes;
import org.apache.poi.xddf.usermodel.chart.LegendPosition;
import org.apache.poi.xssf.usermodel.XSSFChart;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
public class ChartTest2 {
public static void main(String[] args) {
XSSFWorkbook wb = ExcelHelpers.createXLSX();
XSSFSheet sheet = wb.createSheet();
String[] monthNames = {"一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"};
Double[] sales1 = {3.1,5.2,8.0,9.0,3.0,5.0,8.0,9.0,3.0,5.0,8.0,0.9};
Double[] sales2={5.0,81.0,4.0,9.8,1.8,3.9,5.8,81.8,4.8,9.8,1.8,3.9};
ChartFromArrayBuilder<Double> chartBuilder = new ChartFromArrayBuilder<>(ChartTypes.LINE);
XSSFChart chart = ExcelHelpers.createChart(sheet,0, 5, 7, 26);
chart.setTitleText("销售龙虎榜");
chart.getOrAddLegend().setPosition(LegendPosition.LEFT);
chartBuilder.setCategoryNames(monthNames)
.putValues("小王",sales1)
.putValues("小李",sales2)
.setCategoryAxisTitle("月份").setValueAxisTitle("销量")
.build(chart);
ExcelHelpers.saveToFile(wb, "d:/temp/1.xlsx");
CommonHelpers.close(wb);
DesktopHelpers.openFile("d:/temp/1.xlsx");
}
}