Java利用POI實現(xiàn)導(dǎo)入導(dǎo)出Excel表格
本文實例為大家分享了Java利用POI實現(xiàn)導(dǎo)入導(dǎo)出Excel表格的具體代碼,供大家參考,具體內(nèi)容如下
一、Java利用POI實現(xiàn)導(dǎo)入導(dǎo)出Excel表格demo
1.引入依賴
<dependency> ? ? ? <groupId>org.apache.poi</groupId> ? ? ? <artifactId>poi-ooxml</artifactId> ? ? ? ?<version>4.1.2</version> </dependency>
2.導(dǎo)入demo
2.1 controller層
/** ? ? ?* Excel導(dǎo)入? ? ? ?*/ ? ? @PostMapping("/import") ? ? public Result userImport2(@RequestParam("file") MultipartFile file) throws Exception{ ? ? ? ? Result result=userService.userImportExcel(file); ? ? ? ? return result; ? ? }
2.2 service實現(xiàn)類層
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(); ? ? ? ? //存入數(shù)據(jù)集合 ? ? ? ? List<User> users=new ArrayList<>(); ? ? ? ? //遍歷數(shù)據(jù) ? ? ? ? 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); ? ? ? ? ? ? } ? ? ? ? } ? ? ? ? //保存數(shù)據(jù) ? ? ? ? saveBatch(users); ? ? ? ? return Result.success(); ? ? }catch (Exception e){ ? ? ? ? e.printStackTrace(); ? ? ? ? log.info("error:{}",e); ? ? } ? ? return Result.error("300","導(dǎo)入失敗"); } /** ?* 判斷值的類型 ?*/ public String getValue(HSSFCell cell) { ? ? if(cell==null){ ? ? ? ? return ""; ? ? } ? ? String cellValue= ""; ? ? try { ? ? ? ? DecimalFormat df=new DecimalFormat("0.00"); ? ? ? ? if(cell.getCellType()== CellType.NUMERIC){ ? ? ? ? ? ? //日期時間轉(zhuǎn)換 ? ? ? ? ? ? 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){ ? ? ? ? ? ? //轉(zhuǎn)換公式 保留兩位 ? ? ? ? ? ? cellValue=df.format(cell.getNumericCellValue()); ? ? ? ? }else{ ? ? ? ? ? ? cellValue=null; ? ? ? ? } ? ? } catch (Exception e) { ? ? ? ? e.printStackTrace(); ? ? ? ? cellValue="-1"; ? ? } ? ? return cellValue; }
3.導(dǎo)出demo
3.1 controller層
/** ?* 導(dǎo)出? ?* @param response ?* @return ?* @throws Exception ?*/ @GetMapping("/export") public Result userExport2(HttpServletResponse response) throws Exception{ ? ? Result result=userService.userExportExcel(response); ? ? return result; }
3.2 service實現(xiàn)類
public Result userExportExcel(HttpServletResponse response) { ? ? try { ? ? ? ? //創(chuàng)建excel ? ? ? ? XSSFWorkbook sheets = new XSSFWorkbook(); ? ? ? ? //創(chuàng)建行 ? ? ? ? XSSFSheet sheet = sheets.createSheet("用戶信息"); ? ? ? ? //格式設(shè)置 ? ? ? ? XSSFCellStyle cellStyle = sheets.createCellStyle(); ? ? ? ? //橫向居中 ? ? ? ? cellStyle.setAlignment(HorizontalAlignment.CENTER); ? ? ? ? //創(chuàng)建單元格第一列 ? ? ? ? XSSFRow row = sheet.createRow(0); ? ? ? ? //表頭 ? ? ? ? this.titleExcel(row,cellStyle); ? ? ? ? //查詢?nèi)康挠脩魯?shù)據(jù) ?mybatis-plus ? ? ? ? List<User> list = list(); ? ? ? ? //遍歷設(shè)置值 ? ? ? ? for(int i=0;i<list.size();i++){ ? ? ? ? ? ? XSSFRow rows = sheet.createRow(i+1); ? ? ? ? ? ? User user=list.get(i); ? ? ? ? ? ? //表格里賦值 ? ? ? ? ? ? this.titleExcelValue(user,rows,cellStyle); ? ? ? ? } ? ? ? ? //設(shè)置瀏覽器響應(yīng)格式 ? ? ? ? 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","導(dǎo)出失敗"); } /** *表格里賦值 **/ 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工具類封裝方法導(dǎo)出導(dǎo)入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.導(dǎo)入demo
/** ? ? ?* Excel導(dǎo)入? */ @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); ? ? ? ? //讀取表的內(nèi)容 ? ? ? ? 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.導(dǎo)出demo
?/** ? ? ?* Excel導(dǎo)出 方法一 ? ? ?*/ ? ? @GetMapping("/export") ? ? public Result userExport(HttpServletResponse response) throws Exception{ ? ? ? ? //查詢?nèi)康挠脩魯?shù)據(jù) ? ? ? ? List<User> list = userService.list(); ? ? ? ? //在內(nèi)存里做操作,保存到瀏覽器 ? ? ? ? ExcelWriter writer = ExcelUtil.getWriter(true); ? ? ? ? //自定義標(biāo)題別名 ? ? ? ? writer.addHeaderAlias("uname","用戶名"); ? ? ? ? writer.addHeaderAlias("upassword","密碼"); ? ? ? ? writer.addHeaderAlias("usex","性別"); ? ? ? ? writer.addHeaderAlias("role","角色"); ? ? ? ? writer.addHeaderAlias("ulove","愛心值"); ? ? ? ? writer.addHeaderAlias("uphoto","電話號碼"); ? ? ? ? writer.addHeaderAlias("uaddress","地址"); ? ? ? ? //一次性寫出list內(nèi)的對象的Excel,使用默認(rèn)樣式,強制輸出標(biāo)題 ? ? ? ? writer.write(list,true); ? ? ? ? //設(shè)置瀏覽器響應(yīng)格式 ? ? ? ? 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(); ? ? }
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Java使用POI導(dǎo)出Excel(一):單sheet
- Java用POI導(dǎo)入導(dǎo)出Excel實例分析
- Java中用POI實現(xiàn)將數(shù)據(jù)導(dǎo)出到Excel
- Java中利用POI優(yōu)雅的導(dǎo)出Excel文件詳解
- Java使用poi組件導(dǎo)出Excel格式數(shù)據(jù)
- Java使用POI導(dǎo)出大數(shù)據(jù)量Excel的方法
- java poi導(dǎo)出圖片到excel示例代碼
- java使用poi導(dǎo)出Excel的方法
- Java poi導(dǎo)出Excel下載到客戶端
- Java使用POI導(dǎo)出Excel(二):多個sheet
相關(guān)文章
IDEA 項目創(chuàng)建Mapper的xml文件的方法
這篇文章主要介紹了IDEA 項目創(chuàng)建Mapper的xml文件的方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-11-11Java中byte[]、String、Hex字符串等轉(zhuǎn)換的方法
這篇文章主要介紹了Java中byte[]、String、Hex字符串等轉(zhuǎn)換的方法,代碼很簡單,需要的朋友可以參考下2018-05-05Java存儲過程調(diào)用CallableStatement的方法
這篇文章主要介紹了Java存儲過程調(diào)用CallableStatement的方法,幫助大家更好的理解和學(xué)習(xí)Java,感興趣的朋友可以了解下2020-11-11Spring Cloud Gateway實現(xiàn)灰度發(fā)布方案
灰度發(fā)布是在微服務(wù)中的表現(xiàn)為同一服務(wù)同時上線不同版本,讓一部分用戶使用新版本來驗證新特性,如果驗證沒有問題,則將所有用戶都遷移到新版本上,本文就來介紹一下如何實現(xiàn),感興趣的可以了解一下2023-12-12Spring Security和Shiro的相同點與不同點整理
在本篇文章里小編給大家整理的是關(guān)于Spring Security和Shiro的相同不同點整理,需要的朋友們可以參考下。2020-02-02Java編程實現(xiàn)服務(wù)器端支持?jǐn)帱c續(xù)傳的方法(可支持快車、迅雷)
這篇文章主要介紹了Java編程實現(xiàn)服務(wù)器端支持?jǐn)帱c續(xù)傳的方法,涉及Java文件傳輸?shù)南嚓P(guān)技巧,具有一定參考借鑒價值,需要的朋友可以參考下2015-11-11maven利用tomcat插件部署遠(yuǎn)程Linux服務(wù)器的步驟詳解
Maven已經(jīng)是Java的項目管理常用方式,下面這篇文章主要給大家介紹了關(guān)于maven利用tomcat插件部署遠(yuǎn)程Linux服務(wù)器的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2017-11-11