2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > java修改excel图表数据源 导出excel图表文件

java修改excel图表数据源 导出excel图表文件

时间:2023-11-21 07:55:42

相关推荐

java修改excel图表数据源 导出excel图表文件

1.首先需要引进poi相关依赖,需要注意的是,如果没有ooxml-schemas,代码是会报错的

<dependency><groupId>org.apache.poi</groupId><artifactId>ooxml-schemas</artifactId><version>1.0</version></dependency>

2.java导出带柱状图或饼状图的excel其实有两种方式,一种是直接创建新的excel文件,在该文件中写入柱状图或其他的图,并写入数据源,这种方式相对来说较复杂,因为需要设置很多图的样式;第二种是直接读取本地的模板excel文件,把文件中已经创建好的的图表赋值我们从后台查询的数据,这种方式比较简单,很多样式都可以在模板中设置好,我们直接获取excel文件中的各个图,再分别指定数据源即可

String path = "模板存放全路径";File excel = new File(path);//写入数据到excel文件中,只写第一列和第二列,表头除外FileInputStream is = new FileInputStream(excel);XSSFWorkbook xssfWorkbook = new XSSFWorkbook(is);//获取创建工作簿的第一页XSSFSheet sheet = xssfWorkbook.getSheetAt(0);//自动计算sheet.setForceFormulaRecalculation(true);//给指定的sheet命名xssfWorkbook.setSheetName(0, "图表统计");//存储当前表格的样式XSSFCellStyle cellStyle = xssfWorkbook.createCellStyle();//遍历列,填充数据for (int i = 0; i < lstStatistic.size(); i++) {Row row = sheet.createRow(i+1);row.createCell(0).setCellValue(lstStatistic.get(i).getString(mapParams.get("onStatisticField").toString()));//keyrow.createCell(1).setCellValue(lstStatistic.get(i).getDoubleValue(mapParams.get("outStatisticFieldName").toString()));//value}//遍历图表,设置图表的选值范围---仅支持xlsx格式的excelXSSFDrawing drawingPatriarch = sheet.getDrawingPatriarch();//拿到图形List<XSSFChart> charts = drawingPatriarch.getCharts();XSSFChart chart = null;CTChart ctChart = null;CTPlotArea plotArea = null;/*-----------------柱状图-------------------*/chart = charts.get(0);ctChart = chart.getCTChart();plotArea = ctChart.getPlotArea();// 获取图表的系列CTBarSer serBar = plotArea.getBarChartArray(0).getSerArray(0);// serBar.getTx().getStrRef().setF("柱状图");// 指定数据区域serBar.getCat().getNumRef().setF("图表统计!$A$2:$A$"+(lstStatistic.size()+1));serBar.getVal().getNumRef().setF("图表统计!$B$2:$B$"+(lstStatistic.size()+1));/*------------------饼状图-----------------*/chart = charts.get(1);ctChart = chart.getCTChart();plotArea = ctChart.getPlotArea();CTPieSer serPipe = plotArea.getPieChartArray(0).getSerArray(0);serPipe.getCat().getNumRef().setF("图表统计!$A$2:$A$"+(lstStatistic.size()+1));serPipe.getVal().getNumRef().setF("图表统计!$B$2:$B$"+(lstStatistic.size()+1));//写出FileOutputStream os = new FileOutputStream(excel);xssfWorkbook.write(os);xssfWorkbook.close();//TODO 流的处理is.close();os.flush();os.close();

这里注意一点就是,只支持xlsx格式的excel文件

3.本地模板文件截图如下

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。