一、Java利用POI实现导入导出Excel表格demo
1.引入依赖
<dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>4.1.2</version> </dependency>
2.导入demo
2.1 controller层
/** * Excel导入 */ @PostMapping("/import") public Result userImport2(@RequestParam("file") MultipartFile file) throws Exception{ Result result=userService.userImportExcel(file); return result; }
2.2 service实现类层
public Result userImportExcel(MultipartFile file){ try { InputStream inputStream = file.getInputStream(); XSSFWorkbook sheets = new XSSFWorkbook(inputStream); //获取表单sheet 第一个 XSSFSheet sheetAt = sheets.getSheetAt(0); //获取第一行 int firstRowNum = sheetAt.getFirstRowNum(); //最后一行 int lastRowNum = sheetAt.getLastRowNum(); //存入数据集合 List<User> users=new ArrayList<>(); //遍历数据 for(int i=firstRowNum+1;i<lastRowNum+1;i++){ XSSFRow row = sheetAt.getRow(i); if(row!=null){ /* //获取第一行的第一列 int firstCellNum = row.getFirstCellNum(); //获取第一行的最后列 short lastCellNum = row.getLastCellNum(); for (int j=firstCellNum;j<lastCellNum+1;j++){ //放入集合中需要可以用这种方法 String cellValue = getValue(row.getCell(firstCellNum)); }*/ //这里我就直接赋值 User user = new User(); user.setUname(row.getCell(0).getStringCellValue()); user.setUpassword(row.getCell(1).getStringCellValue()); user.setUsex(row.getCell(2).getStringCellValue()); user.setRole(row.getCell(3).getStringCellValue()); user.setUlove((int) row.getCell(4).getNumericCellValue()); user.setUphoto(row.getCell(5).getStringCellValue()); user.setUaddress(row.getCell(6).getStringCellValue()); users.add(user); } } //保存数据 saveBatch(users); return Result.success(); }catch (Exception e){ e.printStackTrace(); log.info("error:{}",e); } return Result.error("300","导入失败"); } /** * 判断值的类型 */ public String getValue(HSSFCell cell) { if(cell==null){ return ""; } String cellValue= ""; try { DecimalFormat df=new DecimalFormat("0.00"); if(cell.getCellType()== CellType.NUMERIC){ //日期时间转换 if(HSSFDateUtil.isCellDateFormatted(cell)){ cellValue=DateFormatUtils.format(cell.getDateCellValue(),"yyyy-MM-dd"); }else{ NumberFormat instance = NumberFormat.getInstance(); cellValue=instance.format(cell.getNumericCellValue()).replace(",",""); } }else if(cell.getCellType() == CellType.STRING){ //字符串 cellValue=cell.getStringCellValue(); }else if(cell.getCellType() == CellType.BOOLEAN){ //Boolean cellValue= String.valueOf(cell.getBooleanCellValue()); }else if(cell.getCellType() == CellType.ERROR){ //错误 }else if(cell.getCellType() == CellType.FORMULA){ //转换公式 保留两位 cellValue=df.format(cell.getNumericCellValue()); }else{ cellValue=null; } } catch (Exception e) { e.printStackTrace(); cellValue="-1"; } return cellValue; }
3.导出demo
3.1 controller层
/** * 导出 * @param response * @return * @throws Exception */ @GetMapping("/export") public Result userExport2(HttpServletResponse response) throws Exception{ Result result=userService.userExportExcel(response); return result; }
3.2 service实现类
public Result userExportExcel(HttpServletResponse response) { try { //创建excel XSSFWorkbook sheets = new XSSFWorkbook(); //创建行 XSSFSheet sheet = sheets.createSheet("用户信息"); //格式设置 XSSFCellStyle cellStyle = sheets.createCellStyle(); //横向居中 cellStyle.setAlignment(HorizontalAlignment.CENTER); //创建单元格第一列 XSSFRow row = sheet.createRow(0); //表头 this.titleExcel(row,cellStyle); //查询全部的用户数据 mybatis-plus List<User> list = list(); //遍历设置值 for(int i=0;i<list.size();i++){ XSSFRow rows = sheet.createRow(i+1); User user=list.get(i); //表格里赋值 this.titleExcelValue(user,rows,cellStyle); } //设置浏览器响应格式 response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8"); String filName= URLEncoder.encode("用户信息","UTF-8"); response.setHeader("Content-Disposition","attachment;filename="+filName+".xls"); ServletOutputStream outputStream=response.getOutputStream(); sheets.write(outputStream); outputStream.close(); sheets.close(); return Result.success(); }catch (Exception e){ e.printStackTrace(); log.info("error:{}",e); } return Result.error("300","导出失败"); } /** *表格里赋值 **/ public void titleExcelValue(User user, XSSFRow row,XSSFCellStyle cellStyle) { XSSFCell cellId = row.createCell(0); cellId.setCellValue(user.getUid()); cellId.setCellStyle(cellStyle); XSSFCell cellUserName = row.createCell(1); cellUserName.setCellValue(user.getUname()); cellUserName.setCellStyle(cellStyle); XSSFCell cellPassword = row.createCell(2); cellPassword.setCellValue(user.getUpassword()); cellPassword.setCellStyle(cellStyle); XSSFCell cellSex = row.createCell(3); cellSex.setCellValue(user.getUsex()); cellSex.setCellStyle(cellStyle); XSSFCell cellRole = row.createCell(4); cellRole.setCellValue(user.getRole()); cellRole.setCellStyle(cellStyle); XSSFCell cellLoveValue = row.createCell(5); cellLoveValue.setCellValue(user.getRole()); cellLoveValue.setCellStyle(cellStyle); XSSFCell cellPhone = row.createCell(6); cellPhone.setCellValue(user.getUphoto()); cellPhone.setCellStyle(cellStyle); XSSFCell cellAddress = row.createCell(7); cellAddress.setCellValue(user.getUaddress()); cellAddress.setCellStyle(cellStyle); } /** 表头 **/ public void titleExcel(XSSFRow row,XSSFCellStyle cellStyle){ XSSFCell cellId = row.createCell(0); cellId.setCellValue("用户ID"); cellId.setCellStyle(cellStyle); XSSFCell cellUserName = row.createCell(1); cellUserName.setCellValue("用户名"); cellUserName.setCellStyle(cellStyle); XSSFCell cellPassword = row.createCell(2); cellPassword.setCellValue("密码"); cellPassword.setCellStyle(cellStyle); XSSFCell cellSex = row.createCell(3); cellSex.setCellValue("性别"); cellSex.setCellStyle(cellStyle); XSSFCell cellRole = row.createCell(4); cellRole.setCellValue("角色"); cellRole.setCellStyle(cellStyle); XSSFCell cellLoveValue = row.createCell(5); cellLoveValue.setCellValue("爱心值"); cellLoveValue.setCellStyle(cellStyle); XSSFCell cellPhone = row.createCell(6); cellPhone.setCellValue("电话号码"); cellPhone.setCellStyle(cellStyle); XSSFCell cellAddress = row.createCell(7); cellAddress.setCellValue("地址"); cellAddress.setCellStyle(cellStyle); }
二、Hutool工具类封装方法导出导入Excel
1.引入依赖
把poi封装到工具类方法里面
<!-- hutool --> <dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>5.7.20</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>4.1.2</version> </dependency>
2.导入demo
/** * Excel导入 */ @PostMapping("/import") public Result userImport(@RequestParam("file") MultipartFile file) throws Exception{ System.out.println(file.toString()); //InputStream inputStream = multipartFile.getInputStream(); InputStream inputStream = file.getInputStream(); ExcelReader reader = ExcelUtil.getReader(inputStream); //读取表的内容 List<List<Object>> list = reader.read(1); List<User> users = new ArrayList<>(); for(List<Object> row : list){ User user = new User(); user.setUname(row.get(0).toString()); user.setUpassword(row.get(1).toString()); user.setUsex(row.get(2).toString()); user.setRole(row.get(3).toString()); user.setUlove(Integer.valueOf(row.get(4).toString())); user.setUphoto(row.get(5).toString()); user.setUaddress(row.get(6).toString()); users.add(user); } //批量插入用户信息 mybatis-plus userService.saveBatch(users); return Result.success(); }
3.导出demo
/** * Excel导出 方法一 */ @GetMapping("/export") public Result userExport(HttpServletResponse response) throws Exception{ //查询全部的用户数据 List<User> list = userService.list(); //在内存里做操作,保存到浏览器 ExcelWriter writer = ExcelUtil.getWriter(true); //自定义标题别名 writer.addHeaderAlias("uname","用户名"); writer.addHeaderAlias("upassword","密码"); writer.addHeaderAlias("usex","性别"); writer.addHeaderAlias("role","角色"); writer.addHeaderAlias("ulove","爱心值"); writer.addHeaderAlias("uphoto","电话号码"); writer.addHeaderAlias("uaddress","地址"); //一次性写出list内的对象的Excel,使用默认样式,强制输出标题 writer.write(list,true); //设置浏览器响应格式 response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8"); String filName= URLEncoder.encode("用户信息","UTF-8"); response.setHeader("Content-Disposition","attachment;filename="+filName+".xls"); ServletOutputStream outputStream=response.getOutputStream(); writer.flush(outputStream,true); outputStream.close(); writer.close(); return Result.success(); }
以上是Java怎么利用POI实现导入导出Excel表格的详细内容。更多信息请关注PHP中文网其他相关文章!

本文讨论了使用Maven和Gradle进行Java项目管理,构建自动化和依赖性解决方案,以比较其方法和优化策略。

本文使用Maven和Gradle之类的工具讨论了具有适当的版本控制和依赖关系管理的自定义Java库(JAR文件)的创建和使用。

本文讨论了使用咖啡因和Guava缓存在Java中实施多层缓存以提高应用程序性能。它涵盖设置,集成和绩效优势,以及配置和驱逐政策管理最佳PRA

本文讨论了使用JPA进行对象相关映射,并具有高级功能,例如缓存和懒惰加载。它涵盖了设置,实体映射和优化性能的最佳实践,同时突出潜在的陷阱。[159个字符]

Java的类上载涉及使用带有引导,扩展程序和应用程序类负载器的分层系统加载,链接和初始化类。父代授权模型确保首先加载核心类别,从而影响自定义类LOA


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

适用于 Eclipse 的 SAP NetWeaver 服务器适配器
将Eclipse与SAP NetWeaver应用服务器集成。

PhpStorm Mac 版本
最新(2018.2.1 )专业的PHP集成开发工具

安全考试浏览器
Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。

Dreamweaver Mac版
视觉化网页开发工具

MinGW - 适用于 Windows 的极简 GNU
这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。