【JAVA】POI生成EXCEL图表(柱状图、折线等)

1、使用excel工具自带的图形工具创建一个图:

2、绑定数据区域:

3、数据区域绑定完成,我们要做的就是将数据写入到数据区域中:

4、标记

5、POI 引入包

<!-- https://mvnrepository.com/artifact/org.apache.poi/poi -->
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>3.14</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml -->
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>3.14</version>
        </dependency>

6、代码:

FileInputStream is = new FileInputStream("刚才创建的文件所在目录+文件名");
            XSSFWorkbook xssfWorkbook = new XSSFWorkbook(is);
            FileOutputStream os = new FileOutputStream("导出的位置");
            //获取创建工作簿的第一页
            XSSFSheet sheet = xssfWorkbook.getSheetAt(0);
            //自动计算
            sheet.setForceFormulaRecalculation(true);
            //给指定的sheet命名
            xssfWorkbook.setSheetName(0, "sheet0");
            //初始化当前的索引,设为当前sheet的最后一行行数
            int allRows = sheet.getLastRowNum();
            //存储当前表格的样式
            XSSFCellStyle cellStyle = xssfWorkbook.createCellStyle();
            //填充数据
          for(int i=allRows;i<=allRows;i++){
            XSSFRow row = sheet.getRow(i);
            if (row == null) {
                continue;
            }

            //遍历列
            for (int j = 1; j <=dailyReportPart8.size(); j++) {
                XSSFCell cell = row.getCell(j) != null ? row.getCell(j) : row.createCell(j);
                String cellValue = cell.getStringCellValue();
                if (cellValue.startsWith("#a1")) {
                    cell.setCellValue(1);
                }
               
            }

        }
            //写出
            xssfWorkbook.write(os);
            //TODO 流的处理
            is.close();
            os.flush();
            os.close();

 

  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 16
    评论
项目中想实现excel图表POI不支持所以想到了这个方法。放上来抛砖引玉,感兴趣的欢迎大家交流 注:-------------------------------------------------------------------------- 其实现原理和利用JavaScript实现客户端绘图完全一样。后台代码将输入 写入特定区域,前端脚本在页面载入时执行脚本绘图。大家都是做B/S开发 的,这方面的只是不需要我多说了吧。 如果我们让一个HTML页面在载入时显示一个提示框用后台编程是不现实的 所以我们就动态生成一段JS: window.onload=function(){ ...... } 用Java输出图表的场景和这个一样,POI、JXL对操作Excel图表无能为力 但Excel支持脚本的,也有工作表载入事件,所以也可以用同样的原理实现 只不过这次客户端不再是浏览器而是Excel应用程序。 这样交代的应该比较明白了吧,请不要再留言抱怨没有Java代码了,因为 这根本跟java代码没多大关系,后台的代码所做的工作仅仅是写入必要的 数据数据的解析和绘图操作是在VBA中完成的 ---2009-12-18 今天查找资料翻出来了这段代码,发现里边的类确实是空的,我说怎么总挨骂 呢,当时肯定打包的时候晕透了把另一个本该删除的类打包进去了。我无法 替换文件只能把java代码贴上来了,请自己修改模板文件的路径。 package com.test.poi; import java.io.FileInputStream; import java.io.FileOutputStream; import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.poifs.filesystem.POIFSFileSystem; public class PoiChart { public static void main(String[] args){ try{ POIFSFileSystem fs=new POIFSFileSystem(new FileInputStream("E:/王建波_bak/我的练习/Module.xls")); HSSFWorkbook wb=new HSSFWorkbook(fs); HSSFSheet sheet=wb.getSheetAt(0); HSSFRow row; //写入表头 String[] aTblHeaders=new String[]{ "姓名","语文","数学","英语" }; row=sheet.createRow(0); for(int i=0,len=aTblHeaders.length;i<len;i++){ row.createCell((short)i).setCellValue(aTblHeaders[i]); } //向模板中写入数据 String[] aNames=new String[]{ "张飞","刘备","关羽","曹操","孙权","吕布" }; for(int i=0,nRowLen=aNames.length;i<nRowLen;i++){ row=sheet.createRow(i+1); row.createCell((short)0).setCellValue(aNames[i]); for(int j=1,nColLen=aTblHeaders.length;j<nColLen;j++){ row.createCell((short)j).setCellValue(Math.floor(Math.random()*100)); } } //输出文件 FileOutputStream fout=new FileOutputStream("d:/chart.xls"); wb.write(fout); fout.close(); }catch(Exception e){ e.printStackTrace(); } } }
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值