Java使用POI来实现Excel文件的导入导出

Excel文件的导入和导出的配置和测试

  1. 配置依赖POI 版本可以自己选择
<dependency>
      <groupId>org.apache.poi</groupId>
      <artifactId>poi</artifactId>
      <version>3.11</version>
    </dependency>
  1. 创建一个控制层Controller
    (1)声明一下:首先我是从前台选择那些需要导出,这里是前后台连接在一起的。
 function exportUsers() {
                            //alert("导出Excel文件~~~~~");
                            var ids=new Array();
                            var childs = $("[name='child']:checked");
                            if(childs.length>0){
                                for(var i=0;i<childs.length;i++){
                                    var id=childs[i].value;
                                    ids.push(id);
                                    location.href="/user_exportUsers/"+ids;
                                }
                            }else{
                                alert("请选中要导出的数据!");
                            }
                        }

(2)我们要首先要获取前台jsp传过来的id值,根据id来确定需要导出的是谁。然后我会用到mybatis-plus使用注解的方式来查出具体的数据。
(3)以上都是准备工作,现在才是正题:
1.先创建工作簿对象

HSSFWorkbook workbook=new HSSFWorkbook();

2.创建一个sheet对象

HSSFSheet sheet = workbook.createSheet("用户信息统计表");

3.如果我们需要在导出的excel中给一个标题 那么自己可以设置每个字段对应的是什么内容

HSSFRow titleRow = sheet.createRow(0);
        String[] titles={"工号","姓名","头像","性别","手机","邮箱"};
        for (int i = 0; i < titles.length; i++) {
            HSSFCell cell = titleRow.createCell(i);
            cell.setCellValue(titles[i]);
        }

4.接下来就是你需要把数据库的那些数据给导出去,自己去设置和选择,先要遍历上面用mybatis-plus获取的list集合

for (int i = 0; i <users.size() ;) {
            User user = users.get(i);
            HSSFRow row = sheet.createRow(++i);

5.开始创建单元格并且赋值就是写入到excel表格中

HSSFCell unoCell = row.createCell(0);
            unoCell.setCellValue(user.getUno());
            HSSFCell unameCell = row.createCell(1);
            unameCell.setCellValue(user.getUname());
            HSSFCell uimageCell = row.createCell(2);
            uimageCell.setCellValue(user.getUimage());
            HSSFCell usexCell = row.createCell(3);
            usexCell.setCellValue(user.getUsex()==1?"男":"女");
            HSSFCell phoneCell = row.createCell(4);
            phoneCell.setCellValue(user.getUphone());
            HSSFCell uemailCell = row.createCell(5);
            uemailCell.setCellValue(user.getUemail());

6.接下来有两种选择方式
(1)第一种就是我在前台界面手动导入选择的方式
首先要string一个excel表格的名字

String fileName="用户信息统计表.xls";

然后获取输出流 ServletOutputStream out = response.getOutputStream();
我们在这里设置的强制下载不打开的模式 response.setContentType("application/force-download");
在这里会出现乱码,中文需要给编码格式

response.addHeader("Content-Disposition", "attachment;fileName=" + URLEncoder.encode(fileName, "utf-8"));

最后一步就是导出文件

 workbook.write(out);
            System.out.println("Excel文件导出成功~~~");

(2)第二种就是直接导出文件不需要其他的下载强制那些。但是需要给一个导出到哪的路径

File file=new File("F:/用户信息统计表.xls");
workbook.writ(new FileOutputString(file));

Excel文件导入

文件的导入跟导入没多大差别

  1. 首先要在导出的Controller里面创建一个导入的方法。
    要获取到上传文件的值
jsp里面的代码:
   <input type="file" id="user-name" required placeholder="导入文件" name="uploadExcel">
后台获取方式:
    String filename = uploadExcel.getOriginalFilename();

2.先判断获取的filename有没有,然后创建一个工作簿对象,然后创建一个sheet但是在这里是getSheetAt跟导出有一点不同

 HSSFWorkbook workbook = new HSSFWorkbook(inputStream);
            HSSFSheet sheet = workbook.getSheetAt(0);

3.在这里需要创建一个实体类对象和集合,好存值导入到数据库

 List<User> users = new ArrayList<User>();
User user = new User();

接下来的代码跟导出需要导出的具体数据一样

for (int j = 0; j < row.getLastCellNum(); j++) {
                    HSSFCell cell = row.getCell(j);
                    String cellStr = "";
                    if (cell == null) {// 单元格为空设置cellStr为空串
                        cellStr = "";
                    } else if (cell.getCellType() == HSSFCell.CELL_TYPE_BOOLEAN) {// 对布尔值的处理
                        cellStr = String.valueOf(cell.getBooleanCellValue());
                    } else if (cell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC) {// 对数字值的处理
                        cellStr = cell.getNumericCellValue() + "";
                    } else {
                        // 其余按照字符串处理
                        cellStr = cell.getStringCellValue();
                    }

                    if (j == 0) {
                        user.setUno(cellStr);
                    }
                    if (j == 1) {
                        user.setUname(cellStr);
                    }
                    if (j == 2) {
                        user.setUimage(cellStr);
                    }
                    if (j == 3) {
                        user.setUsex(cellStr.equals("男") ? 1 : 0);
                    }
                    if (j == 4) {
                        user.setUphone(cellStr);
                    }
                    if (j == 5) {
                        user.setUemail(cellStr);
                    }
                }

最后一步调用mybatis-plus方法把值给存进到数据库

boolean b = us.saveBatch(users);

如果对你有所帮助,麻烦点赞支持一下,谢谢

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值