java用POI和JXLS对Excel的导入导出

本文介绍的poi和jxls我同样我们是需要jar包的,jar包我这里直接提供一个maven的配置如下

<dependency>
   <groupId>org.jxls</groupId>
   <artifactId>jxls-poi</artifactId>
   <version>1.0.9</version>
</dependency>

这里可以看到的jar包是jxls-poi的jar包,这其实就是JXLS的jar包,但是它也是引用了poi的jar包,我说下这两个技术的关系大家就会明白,poi是可以对Excel进行各种操作,比如生成Excel文件,取出Excel文件的数据内容等等。而jxls相当于是一个生成Excel文件的一个工具类,只不过他是以模板的形式,让我们写代码更加的方便使用。我这里直接提供各种百度出来的demo可以给大家下载学习,先声明,demo不是我写的我不对他负责,哈哈。地址https://download.csdn.net/download/miwanmeng/10594859  过段时间应该会变成0积分就可以下了,不过没关系我下面提供的代码和这个demo没有关系。

1、poi的导入Excel文件

如果是web项目我要说的是肯定会有文件上传的功能你得先拿到文件流才能操作,web上面文件流的上传下载后续我会从新写一篇文章这里就不做分析

InputStream inputStream = new InputStream("源文件地址");
        List<Student> list = new ArrayList<Student>();
        HSSFWorkbook workbook = null;
        try {
            // 读取Excel文件
            workbook = new HSSFWorkbook(inputStream);
            inputStream.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
        // 循环工作表
        for (int numSheet = 0; numSheet < workbook.getNumberOfSheets(); numSheet++) {
            HSSFSheet hssfSheet = workbook.getSheetAt(numSheet);
            if (hssfSheet == null) {
                continue;
            }
            // 循环行
            for (int rowNum = 2; rowNum <= hssfSheet.getLastRowNum(); rowNum++) {
                HSSFRow hssfRow = hssfSheet.getRow(rowNum);
                if (hssfRow == null) {
                    continue;
                }
                // 将单元格中的内容存入集合
                Student student = new Student();
                HSSFCell cell = hssfRow.getCell(0);
                if (cell == null) {
                    continue;
                }
                student.setName(cell.getStringCellValue());

                cell = hssfRow.getCell(1);
                if (cell == null) {
                    continue;
                }
                //这里唯一需要注意的是类型的转换
                student.setAge((int) cell.getNumericCellValue());

                cell = hssfRow.getCell(2);
                if (cell == null) {
                    continue;
                }
                student.setSex((int) cell.getNumericCellValue());

                cell = hssfRow.getCell(3);
                if (cell == null) {
                    continue;
                }
                student.setGrade(cell.getNumericCellValue());

                cell = hssfRow.getCell(4);
                if (cell == null) {
                    continue;
                }
                 
                student.setClassid((int) cell.getNumericCellValue());
                list.add(student);
            }
        }
        System.out.println(list);

其实对这的导入我们还是比较麻烦的需要每一个参数进行循环,还需要判断类型。下面我要讲的是导出可能大家会觉得很简单

1、jxls的导出Excel文件

这个其实就非常简单了我demo里面有一个工具类,如果大家不满意还可以做出修改我这里解释的是代码部分

      List<Employee> employees = generateSampleEmployeeData();
        OutputStream os = new FileOutputStream("要生成文件的地址");
        Map<String , Object> model=new HashMap<String , Object>();
        model.put("employees", employees);
        model.put("nowdate", new Date());
        JxlsUtils.exportExcel("你的模板文件名", os, model);
        os.close();

这里可以看到我们需要一个模板,那么模板是怎样的呢,我们继续看

这里千万要注意Excel注释部分,注释部分,其实还有其他的写法语法差不多,我这个demo的逻辑在注释部分。

大家可以看到我注释部分的代码就是一个循环遍历的过程有点像EL表达式的循环取值,没错大家如果还想深入的了解可以去官方了解下jxls的一些语法 http://jxls.sourceforge.net/

总结

基本总结一下,虽然poi也可以做导出的功能,但是需要每个文件都要单独写代码所以比较麻烦,但是jxls可以对导出做出比较好的处理,但是呢它是需要写模板的其实也是相当于单独写了一个东西,总的来说互相比较或许你可以写出比jxls更加好的工具类呢。、

2019年三月份jar包仓库更新,博主上面的演示好像已经无法使用了,特此注意。如果有大神知道怎么修复问题,可以告知一下。

猜你喜欢

转载自blog.csdn.net/miwanmeng/article/details/81558001