IDEA使用poi技术实现数据的XLSX导出导入

一、首先编写查询方法与添加方法,用于操作数据(Mysql数据库)

1、查询方法

 public ArrayList<Student> IOPout() {
        ArrayList<Student> list=new ArrayList<>();
        Connection con=null;
        PreparedStatement ps=null;
        ResultSet rs=null;
        try {
            con= DBHelper.getCon();
            ps=con.prepareStatement("select * from student");
            rs=ps.executeQuery();
            while (rs.next()){
                Student s=new Student();
                s.setSid(rs.getInt(1));
                s.setSname(rs.getString(2));
                s.setSsex(rs.getString(3));
                s.setSage(rs.getInt(4));
                s.setSaddr(rs.getString(5));
                list.add(s);
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
        return list;
    }

2、添加方法

  public int add(Student s){
        int i=0;
        Connection con=null;
        PreparedStatement ps=null;
        try {
            con= DBHelper.getCon();
            ps=con.prepareStatement("insert into student values (?,?,?,?,?)");
            ps.setDouble(1,s.getSid());
            ps.setString(2,s.getSname());
            ps.setString(3,s.getSsex());
            ps.setDouble(4,s.getSage());
            ps.setString(5,s.getSaddr());
            i=ps.executeUpdate();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return i;
    }

二、然后导入poi的工具包(本文章自备,请自行下载)

数据导出

一、在下方编写main方法,然后实例化此类,再指定XLXS文件的路径

 creExcl c=new creExcl();
 // 设置Excel文件路径
 File file = new File("D:/student.xlsx");

 

二、调用查询方法,实例化创建文件的类和创建工作表的类,并为工作表设置表名(在poi工具包中)

        //调用查询方法
        ArrayList<Student> list= c.IOPout();

        // 创建文件并指定文件路径
        XSSFWorkbook workbook = new XSSFWorkbook();

        // 创建工作表并设置表名
        XSSFSheet sheet = workbook.createSheet("学生信息");

三、开始创建行,从下标为0的开始,然后设置表头内容

        // 创建行,下标从0开始
        XSSFRow row = sheet.createRow(0);

        // 在行中创建列并赋值,下标从0开始/        
          row.createCell(0).setCellValue("编号");                
          row.createCell(1).setCellValue("姓名");
          row.createCell(2).setCellValue("性别");
          row.createCell(3).setCellValue("年龄");
          row.createCell(4).setCellValue("住址");

四、开始从查询到的数据集合中循环取值

注:下标为0的行为表头,创建行数要+1

         //循环赋值
        for (int os=0;os<=list.size()-1;os++) {
         //创建一行
            row = sheet.createRow(os+1);
            //每一行的每一列加入对应的数据
                row.createCell(0).setCellValue(list.get(os).getSid());
                row.createCell(1).setCellValue(list.get(os).getSname());
                row.createCell(2).setCellValue(list.get(os).getSsex());
                row.createCell(3).setCellValue(list.get(os).getSage());
                row.createCell(4).setCellValue(list.get(os).getSaddr());
           }

 

五、用try-catch包裹,并创建输出流,指向文件所在路径,然后将输出流中的数据写入工作表中,最后关闭输出流

       try {
          FileOutputStream  stream = new FileOutputStream(file);
          // 将数据导出到Excel表格
          workbook.write(stream);
          // 关闭输出流
          stream.close();
       } catch (Exception e) {
          throw new RuntimeException(e);
       }

数据导入

一、创建输入流,创建工作簿,获取工作表,从下标0开始

            //   创建改文件的输入流
            FileInputStream stream = new FileInputStream(file);

            // 创建工作簿   
            Workbook workbook = new XSSFWorkbook(stream);

            // 获取一个工作表,下标从0开始
            Sheet sheet = workbook.getSheetAt(0);

 

二、利用for循环,逐行取出工作表中的数据,并转换数据类型,实例化数据对象,设置对象的属性值,最后调用添加方法,关闭输入流

                        for(int i=1;i<=sheet.getLastRowNum();i++){
                            // 获取行
                            Row row = sheet.getRow(i);

                            // 获取行中列的数据
                            String[] value = new String[5];
//                            获取每一列的数据
                            Cell cell = row.getCell(1);
//                            判断数据是否为null
                            if (cell != null) {
//                                转换数据类型
                                 cell.setCellType(Cell.CELL_TYPE_STRING);
                            }
                            Cell cell1 = row.getCell(2);
                            if (cell1 != null) {
                                cell1.setCellType(Cell.CELL_TYPE_STRING);
                            }
                            Cell cell2 = row.getCell(4);
                            if (cell2 != null) {
                                cell2.setCellType(Cell.CELL_TYPE_STRING);
                            }
//                            初始化学生对象
                            Student s=new Student();
//                            为学生对象设置默认值
                            s.setSid((int)row.getCell(0).getNumericCellValue());
                            s.setSname(cell.getStringCellValue());
                            s.setSsex(cell1.getStringCellValue());
                            s.setSage((int)row.getCell(3).getNumericCellValue());
                            s.setSaddr(cell2.getStringCellValue());
//                                调用添加方法,导入数据
                                int p= c.add(s);
                            }

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值