MENU

Java教程使用POI读取excel文档

July 11, 2020 • Read: 104 • 教程学习

前言

本教程主要介绍从Excel文件读取、向Excel文件写入、读取Excel数据到数据库、增加样式、应用场景等POI的核心知识及常用方法,并通过实际办公案例带你轻松实现Excel文件和Mysql数据库的数据交互。因为在学校项目中需要使用相关知识,在网上找了相关教程,写出了下面的一个小Demo,可以实现从数据库中导出数据到Excl文件中,以及能够从Excel中导入数据到数据库中!

准备工作

经过在百度收集的资料来看,基本使用的maven的方法来下载相关的jar包!我由于项目不使用Maven以及个人使用Maven不熟悉的相关原因,这个Demo就是用手动下载jar包然后导入!需要的jar如下:

jar

核心代码

因为Demo使用的是三层架构的模式,这里就不具体介绍了,Demo可以直接在Github上下载!

  • 文件导入

    System.out.println("请输入导入文件的路径:");
    String path = input.next();
    List<Student> students=save(path);
    ss.saveStudent(students);
    System.out.println("当前数据已经全部存入数据库中!");
    
       /**
         * 从Excel导入数据到数据库!
         *
         * @param path 需要传入的Excel的文件位置
         * @return 返回一个实体类集和(我这里是用学生实体类)
         */
        public static List<Student> save(String path) {
            List<Student> studentList = new ArrayList<Student>();//用于存取导入的学生信息
            try {
                //获取工作簿
                XSSFWorkbook xssfWorkbook = new XSSFWorkbook(path);
                //获取工作表
                XSSFSheet xssfSheet = xssfWorkbook.getSheetAt(0);
                //得到工作表的行数
                int lastRow = xssfSheet.getLastRowNum();
                //遍历
                for (int i = 1; i <= lastRow; i++) {
                    XSSFRow row = xssfSheet.getRow(i);
                    //获取每一行,不为空的情况下,遍历每一个单元格
                    if (row != null) {
                        List<String> list = new ArrayList<String>();
                        //在每一行中遍历每一个单元格
                        for (Cell cell : row) {
                            if (cell != null) {
                                cell.setCellType(CellType.STRING);//控制字符格式为String
                                String value = cell.getStringCellValue();
                                if (value != null && !"".equals(value)) {//如果单元格中字符不为空添加到list集和中
                                    list.add(value);
                                }
                            }
                        }
                        if (list.size() > 0) {
                            //通过构造函数封装得到的数据
                            Student student = new Student(Integer.parseInt(list.get(0)), list.get(1), list.get(2));
                            studentList.add(student);
                        }
                    }
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
            return studentList;
        }
  • 文件导出

    System.out.println("请选择储存位置!");
    String path = input.next();
    List<Student> list = ss.selectAll();
    export(list, path);
    
    
    private static void export(List<Student> list, String path) {
    
            //获取工作簿
            XSSFWorkbook xssfWorkbook = new XSSFWorkbook();
            //获取一个工作表,取名为学生
            XSSFSheet sheet = xssfWorkbook.createSheet("学生");
            //因为Excel的第一行不存储数据,为每一列的命名,一般是数据库的字段类似
            XSSFRow row = sheet.createRow(0);
            row.createCell(0).setCellValue("编号");
            row.createCell(1).setCellValue("姓名");
            row.createCell(2).setCellValue("班级");
            
            for (int i = 0; i < list.size(); i++) {
                //从第二行开始遍历
                XSSFRow row1 = sheet.createRow(i + 1);
                row1.createCell(0).setCellValue(list.get(i).getId());
                row1.createCell(1).setCellValue(list.get(i).getName());
                row1.createCell(2).setCellValue(list.get(i).getCls());
            }
            try {
                //通过文件输出流写入文件
                FileOutputStream f = new FileOutputStream(path);
                //调用XSSFWorkbook的write()方法
                xssfWorkbook.write(f);
                f.flush();//刷新
                xssfWorkbook.close();//关闭资源
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

最后

防止知识遗忘,特记此文,若上出文章有错误,欢迎各位大佬斧正!

Github:https://github.com/iceloX/ExcelTest


作者:冰洛

链接:https://icelo.club/archives/54.html

版权:转载时须注明来源:冰洛博客

Archives QR Code Tip
QR Code for this page
Tipping QR Code