关闭

【JavaWeb开发】使用java实现简单的Excel文件的导入与导出(POI)

标签: javapoiexceljava webapache
3150人阅读 评论(0) 收藏 举报
分类:

前言:在实际的开发中,我们经常需要用户在界面中输入大量重复且有规律的数据,但是一个表单一个表单的填写效率过慢,而且过多的表单也会给JavaWeb的业务逻辑开发带来不小的困扰,所以我们可以使用一个Excel文件来代替这些大量重复且有规律的数据。

使用java实现简单的Excel文件的导入与导出 (POI)

  • 需要导入的jar包:

    由于POI也是apache的一个子项目,所以我们直接去apache的官网直接下载即可:POI官网下载链接

  • Excel转ArrayList

    /**
     * 
     * 描述:excel转list
     * 方法名: excelToList
     * 类名:ExamServiceImpl
     * 返回值类型:ArrayList<StudentInfoEntity>
     * 开发者:暴沸
     * 创建时间:2016年8月30日 下午8:48:17
     * @param file
     * @return
     * @throws IOException 
     */
     //代码解释:此方法主要用于将Excel中的内容转为ArrayList
    public ArrayList<StudentInfoEntity> excelToList(String URL) throws IOException {
        //代码解释:此方法将传入一个URL,即为当前用户所上传的Excel的目标路径,然后返回一个泛型为StudentInfoEntity的ArrayList
        //代码解释:实例化一个新的泛型为StudentInfoEntity的ArrayList对象,用于后面存放从Excel中解析到的内容
        ArrayList<StudentInfoEntity> list = new ArrayList<>();

        //代码解释:创建这个需要解析的Excel文件
        File file = new File(URL);
        //代码解释:创建Excel,读取文件内容,此处使用的是XSSFWorkbook,默认是2013版本,如果是比较老的版本,请使用HSSFWorkbook,其他均需要将X改为H
        XSSFWorkbook workbook = new XSSFWorkbook(FileUtils.openInputStream(file));
        //代码解释:读取默认第一个工作表sheet
        XSSFSheet sheet = workbook.getSheetAt(0);
        //代码解释:获取sheet中最后一行行号
        int lastRowNum = sheet.getLastRowNum();
        //代码解释:循环所有行
        for (int i = 1; i <= lastRowNum; i++) {
            //代码解释:获取当前行中的内容
            XSSFRow row = sheet.getRow(i);
            //代码解释:由于本人在Excel模版中设定的内容仅有两列有效,并且在其他行中,我存放了提示,所以这里不能使用自动获取最后一列,否则程序将出现错误。此处设置当前行最后单元格列号为2(为了避免因为我设置的提示而导致的错误)
            int lastCellNum = 2;
            //代码解释:循环单元格列号,此处主要是用于解析一行中的所有列,将其转化为集合(数组也可以),主要是为了方便后面的操作,此步骤非必须
            ArrayList<String> list2 = new ArrayList<>();
            int index=0;
            //代码解释:获取该行中的数据,并存入集合中(数组也可以)
            for (int j = 0; j < lastCellNum; j++) {
                XSSFCell cell = row.getCell(j);
                if(index<lastCellNum){
                    list2.add(cell.getStringCellValue());
                }
            }
            //代码解释:实例化一个新的StudentInfoEntity对象用于存放上一个for循环中读取并将该行的数据存入即将返回的ArrayList中
            StudentInfoEntity studentInfoEntity = new StudentInfoEntity();
            studentInfoEntity.setStudentName(list2.get(0));
            studentInfoEntity.setStudentNumber(list2.get(1));
            list.add(studentInfoEntity);
        }
        return list;
    }
  • ArrayList转Excel
    /**
     * 从数据库中获取数据,并利用POS生成Excel文件
     * POI生成Excel文件
     * 
     */
    public String downloadGrade(int examId,String contextPath,String examName) {

        //从数据库中获取到的该考试所有考生的成绩的结果集
        ArrayList<MarkEntity> markEntities = studentGradeDao.getStudentGrade(examId);

        String[] title = {"学号","姓名","成绩","ip"};

        //创建Excel工作簿
        XSSFWorkbook workbook = new XSSFWorkbook();
        //创建一个工作表sheet
        XSSFSheet sheet = workbook.createSheet();
        //创建第一行
        XSSFRow row = sheet.createRow(0);
        XSSFCell cell = null;
        //插入第一行数据 学号,姓名,成绩,ip地址
        for (int i = 0; i < title.length; i++) {
            cell = row.createCell(i);
            cell.setCellValue(title[i]);
        }
        //追加数据
        int j = 1;
        for (int i = 0; i < markEntities.size(); i++) {
            MarkEntity markEntity = markEntities.get(i);
            XSSFRow nextrow = sheet.createRow(j);
            XSSFCell cell2 = nextrow.createCell(0);
            cell2.setCellValue(markEntity.getStudentNumber());
            cell2 = nextrow.createCell(1);
            cell2.setCellValue(markEntity.getStudentName() );
            cell2 = nextrow.createCell(2);
            cell2.setCellValue(markEntity.getMark() );
            cell2 = nextrow.createCell(3);
            cell2.setCellValue(markEntity.getIp() );
            j++;
        }
        //创建一个文件
        String path = contextPath+"/"+examName+".xlsx";
        File file = new File(path);
        try {
            file.createNewFile();
            //将Excel内容存盘
            FileOutputStream stream = FileUtils.openOutputStream(file);
            workbook.write(stream);
            stream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return path;
    }
0
1
查看评论

poi根据导入的excel数据自动封装成bean对象集合

又是很久没写博客了,最近在弄一个批量导入的功能,按照古老的做法,当然是一行一行的解析然后根据字段所在的下标或者一列一列的解析依次赋值给bean对象。但是这种古老的方法弊端确实太多,于是想弄一个,根据表头中文名来自动匹配字段,然后根据行数自动创建bean对象的方式,实现标准数据的通用解析。 在具体实...
  • II_bat
  • II_bat
  • 2016-07-11 16:25
  • 4664

利用Java反射机制和POI实现导出Excel功能

1.Apache POI简介 Apache poi工具包是一个著名的操作Microsoft文档的Java工具库,里面提供大量的对word,excel,ppt操作的方法。最近由于项目需要一个将数据库数据导出到excel的功能,所以学习了这个工具包的用法。下面简要介绍一下操作excel的几个重要的类和...
  • u011370617
  • u011370617
  • 2016-11-14 16:58
  • 1046

java web Excel导入、导出的实现

在做web开发时,我们经常会用到数据表格的导入导出功能,这样可以帮我们节省人工操作的时间,极大提高办事效率,下面,直入正题: 笔者所做的导入导出是针对java springMVC框架、工作簿poi以及前端plupload.js插件设计的。第一步、总体介绍首先,来看页面展示,如下图: 导入菜单...
  • qiyongkang520
  • qiyongkang520
  • 2015-11-02 21:54
  • 8499

JAVA WEB POI Excel导出导入

一、废话不多说,下面开始介绍如何POI Excel操作: 1、如何生成excel表格:直接上代码- 新建一个工具类ExcelUtil public class ExcelUtil<T> { /** * 这是一个通用...
  • su19921021
  • su19921021
  • 2015-11-12 08:22
  • 3540

java web导入导出Excel

  • 2016-10-13 17:45
  • 10.49MB
  • 下载

JavaWeb中导入导出Excel数据

1. 利用文件上传的技术,将需要导入的Excel表上传至服务器上。 2. 利用POI技术读取刚上传的文件,将数据封装至List集合。 3. 将List集合转为实体类,进行持久化操作。
  • TMaskBoy
  • TMaskBoy
  • 2016-06-24 19:42
  • 15193

javaweb项目-将数据导出为excel文件思路总结

在生成报表时需要将数据转成excel的文件形式进行下载用,这类方法网上有很多,自己总结一下,方便后期自己查看。 Jsp: <a href=’${pageContext.request.contextPath}/user/exportAllUser. Action’>导出全部 ...
  • q12345qazxc
  • q12345qazxc
  • 2016-06-06 14:16
  • 3122

JAVAweb开发技术-------(七)POI导入导出excel技术

一、 POI简介             Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能。...
  • wolf_love666
  • wolf_love666
  • 2016-11-29 14:32
  • 922

Java Web利用POI导出Excel简单例子

采用Spring mvc架构:  Controller层代码如下  @Controller public class StudentExportController{ @Autowired private StudentExportS...
  • ptzrbin
  • ptzrbin
  • 2013-04-02 14:28
  • 57333

JavaWeb中将数据从数据库导出到Excel表的实例

首先声明此博客基于 http://blog.csdn.net/evangel_z/article/details/7332535 https://github.com/T5750/poi (原著博客中介绍的程序源码) 这个博客里面开发的项目,使用POI导出Excel,经过修改支持文件...
  • TMaskBoy
  • TMaskBoy
  • 2016-05-28 16:03
  • 11903
    关于我
    个人资料
    • 访问:114530次
    • 积分:1576
    • 等级:
    • 排名:千里之外
    • 原创:69篇
    • 转载:7篇
    • 译文:1篇
    • 评论:19条
    博客专栏
    最新评论