日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

詳解Springboot下載Excel的三種方式

瀏覽:231日期:2022-06-15 16:12:36

匯總一下瀏覽器下載和代碼本地下載實現的3種方式。

(其實一般都是在代碼生成excel,然后上傳到oss,然后傳鏈接給前臺,但是我好像沒有實現過直接點擊就能在瀏覽器下載的功能,所以這次一起匯總一下3種實現方式。)

🔥1.EasyExcel--瀏覽器下載1.Maven環境

​網絡上有很多maven的easyexcel版本,還是推薦alibaba的easyexcel,操作簡單,代碼不冗余

<!-- https://mvnrepository.com/artifact/com.alibaba/easyexcel --><dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <version>2.2.10</version></dependency>

2.完整代碼實現

控制層:設置response格式然后直接下載即可

package com.empirefree.springboot.controller;import com.alibaba.excel.EasyExcel;import com.empirefree.springboot.pojo.User;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RestController;import javax.servlet.ServletOutputStream;import javax.servlet.http.HttpServletResponse;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.OutputStream;import java.util.ArrayList;import java.util.List;/** * @program: springboot * @description: * @author: huyuqiao * @create: 2021/07/04 15:01 */@RestControllerpublic class UserController { /** * Author: HuYuQiao * Description: 瀏覽器下載--excel */ @GetMapping('/testRespExcel') public void testRespExcel(HttpServletResponse response){response.addHeader('Content-Disposition', 'attachment;filename=' + 'huyuqiao.xlsx');response.setContentType('application/vnd.ms-excel;charset=gb2312');try {// 從HttpServletResponse中獲取OutputStream輸出流 ServletOutputStream outputStream = response.getOutputStream(); /* * EasyExcel 有多個不同的read方法,適用于多種需求 * 這里調用EasyExcel中通過OutputStream流方式輸出Excel的write方法 * 它會返回一個ExcelWriterBuilder類型的返回值 * ExcelWriterBuilde中有一個doWrite方法,會輸出數據到設置的Sheet中 */ EasyExcel.write(outputStream, User.class).sheet('測試數據').doWrite(getAllUser());} catch (IOException e) { e.printStackTrace();} } public List<User> getAllUser(){List<User> userList = new ArrayList<>();for (int i=0;i<100;i++){ User user = User.builder().name('胡宇喬'+ i).password('huyuqiao').age(i).build(); userList.add(user);}return userList; }}

實體類:給User設置對應的excel屬性即可,value代表excel中名字,index代表第幾列

package com.empirefree.springboot.pojo;import com.alibaba.excel.annotation.ExcelProperty;import com.alibaba.excel.metadata.BaseRowModel;import lombok.Builder;import lombok.Data;/** * @program: springboot * @description: user * @author: huyuqiao * @create: 2021/07/04 14:53 */@Data@Builderpublic class User extends BaseRowModel{ @ExcelProperty(value = '姓名',index = 0) private String name; @ExcelProperty(value = '密碼',index = 1) private String password; @ExcelProperty(value = '年齡',index = 2) private Integer age;}3.實現效果

詳解Springboot下載Excel的三種方式

🔥2.EasyExcel--本地下載1.完整代碼實現

​maven和上面一樣,只是文件輸出流設置一下即可

package com.empirefree.springboot.controller;import com.alibaba.excel.EasyExcel;import com.empirefree.springboot.pojo.User;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RestController;import javax.servlet.ServletOutputStream;import javax.servlet.http.HttpServletResponse;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.OutputStream;import java.util.ArrayList;import java.util.List;/** * @program: springboot * @description: * @author: huyuqiao * @create: 2021/07/04 15:01 */@RestControllerpublic class UserController { /** * Author: HuYuQiao * Description:本地生成--excel */ @GetMapping('/testLocalExcel') public void testLocalExcel(){// 文件輸出位置OutputStream out = null;try { out = new FileOutputStream('C:UsersEDYDesktopempirefree.xlsx'); EasyExcel.write(out, User.class).sheet('測試數據').doWrite(getAllUser());} catch (FileNotFoundException e) { e.printStackTrace();}finally { try {// 關閉流out.close(); } catch (IOException e) {e.printStackTrace(); }} } public List<User> getAllUser(){List<User> userList = new ArrayList<>();for (int i=0;i<100;i++){ User user = User.builder().name('張三'+ i).password('1234').age(i).build(); userList.add(user);}return userList; }}2.實現效果

詳解Springboot下載Excel的三種方式

🔥3.Poi--瀏覽器實現下載1.Maven環境

<!-- excel導出工具 --><dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>RELEASE</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>RELEASE</version></dependency>2.代碼實現

控制層

/** * Author: HuYuQiao * Description: excle-export */ @GetMapping('/export') public String exportExcel(HttpServletResponse response) {System.out.println('成功到達到處excel....');String fileName = 'test.xls';if (fileName == null || ''.equals(fileName)) { return '文件名不能為空!';} else { if (fileName.endsWith('xls')) {Boolean isOk = excelService.exportExcel(response, fileName, 1, 10);if (isOk) { return '導出成功!';} else { return '導出失敗!';} } return '文件格式有誤!';} }

serviceimpl層

/** * Author: HuYuQiao * Description: excel-impl */ @Override public Boolean exportExcel(HttpServletResponse response, String fileName, Integer pageNum, Integer pageSize) {log.info('導出數據開始。。。。。。');//查詢數據并賦值給ExcelDataList<User> userList = userMapper.find();System.out.println(userList.size() + 'size');List<String[]> list = new ArrayList<String[]>();for (User user : userList) { String[] arrs = new String[4]; arrs[0] = String.valueOf(user.getId()); arrs[1] = user.getUsername(); arrs[2] = user.getPassword(); arrs[3] = String.valueOf(user.getEnable()); list.add(arrs);}//表頭賦值String[] head = {'序列', '用戶名', '密碼', '狀態'};ExcelData data = new ExcelData();data.setHead(head);data.setData(list);data.setFileName(fileName);//實現導出try { ExcelUtil.exportExcel(response, data); log.info('導出數據結束。。。。。。'); return true;} catch (Exception e) { log.info('導出數據失敗。。。。。。'); return false;} }

工具類

package com.example.demo.utils;import com.example.demo.entity.ExcelData;import com.example.demo.entity.User;import lombok.extern.slf4j.Slf4j;import org.apache.poi.hssf.usermodel.*;import org.apache.poi.ss.usermodel.*;import javax.servlet.http.HttpServletResponse;import java.io.BufferedOutputStream;import java.io.FileInputStream;import java.io.InputStream;import java.io.OutputStream;import java.util.ArrayList;import java.util.List;import static org.apache.poi.ss.usermodel.CellType.*;/** * Author: HuYuQiao * Description: excelUtil */@Slf4jpublic class ExcelUtil { /** * Author: HuYuQiao * Description: excelUtil-export */ public static void exportExcel(HttpServletResponse response, ExcelData data) {log.info('導出解析開始,fileName:{}',data.getFileName());try { //實例化HSSFWorkbook HSSFWorkbook workbook = new HSSFWorkbook(); //創建一個Excel表單,參數為sheet的名字 HSSFSheet sheet = workbook.createSheet('sheet'); //設置表頭 setTitle(workbook, sheet, data.getHead()); //設置單元格并賦值 setData(sheet, data.getData()); //設置瀏覽器下載 setBrowser(response, workbook, data.getFileName()); log.info('導出解析成功!');} catch (Exception e) { log.info('導出解析失敗!'); e.printStackTrace();} } /** * Author: HuYuQiao * Description: excelUtil-settitle */ private static void setTitle(HSSFWorkbook workbook, HSSFSheet sheet, String[] str) {try { HSSFRow row = sheet.createRow(0); //設置列寬,setColumnWidth的第二個參數要乘以256,這個參數的單位是1/256個字符寬度 for (int i = 0; i <= str.length; i++) {sheet.setColumnWidth(i, 15 * 256); } //設置為居中加粗,格式化時間格式 HSSFCellStyle style = workbook.createCellStyle(); HSSFFont font = workbook.createFont(); font.setBold(true); style.setFont(font); style.setDataFormat(HSSFDataFormat.getBuiltinFormat('m/d/yy h:mm')); //創建表頭名稱 HSSFCell cell; for (int j = 0; j < str.length; j++) {cell = row.createCell(j);cell.setCellValue(str[j]);cell.setCellStyle(style); }} catch (Exception e) { log.info('導出時設置表頭失敗!'); e.printStackTrace();} } /** * Author: HuYuQiao * Description: excelUtil-setData */ private static void setData(HSSFSheet sheet, List<String[]> data) {try{ int rowNum = 1; for (int i = 0; i < data.size(); i++) {HSSFRow row = sheet.createRow(rowNum);for (int j = 0; j < data.get(i).length; j++) { row.createCell(j).setCellValue(data.get(i)[j]);}rowNum++; } log.info('表格賦值成功!');}catch (Exception e){ log.info('表格賦值失??!'); e.printStackTrace();} } /** * Author: HuYuQiao * Description: excelUtil-setBrowser */ private static void setBrowser(HttpServletResponse response, HSSFWorkbook workbook, String fileName) {try { //清空response response.reset(); //設置response的Header response.addHeader('Content-Disposition', 'attachment;filename=' + fileName); OutputStream os = new BufferedOutputStream(response.getOutputStream()); response.setContentType('application/vnd.ms-excel;charset=gb2312'); //將excel寫入到輸出流中 workbook.write(os); os.flush(); os.close(); log.info('設置瀏覽器下載成功!');} catch (Exception e) { log.info('設置瀏覽器下載失敗!'); e.printStackTrace();} } /** * Author: HuYuQiao * Description: excelUtil--importExcel */ public static List<Object[]> importExcel(String fileName) {log.info('導入解析開始,fileName:{}',fileName);try { List<Object[]> list = new ArrayList<>(); InputStream inputStream = new FileInputStream(fileName); Workbook workbook = WorkbookFactory.create(inputStream); Sheet sheet = workbook.getSheetAt(0); //獲取sheet的行數 int rows = sheet.getPhysicalNumberOfRows(); for (int i = 0; i < rows; i++) {//過濾表頭行if (i == 0) { continue;}//獲取當前行的數據Row row = sheet.getRow(i);Object[] objects = new Object[row.getPhysicalNumberOfCells()];int index = 0;for (Cell cell : row) { if (cell.getCellType().equals(NUMERIC)) {objects[index] = (int) cell.getNumericCellValue(); } if (cell.getCellType().equals(STRING)) {objects[index] = cell.getStringCellValue(); } if (cell.getCellType().equals(BOOLEAN)) {objects[index] = cell.getBooleanCellValue(); } if (cell.getCellType().equals(ERROR)) {objects[index] = cell.getErrorCellValue(); } index++;}list.add(objects); } log.info('導入文件解析成功!'); return list;}catch (Exception e){ log.info('導入文件解析失??!'); e.printStackTrace();}return null; } //測試導入 public static void main(String[] args) {try { String fileName = 'E:/test.xlsx'; List<Object[]> list = importExcel(fileName); for (int i = 0; i < list.size(); i++) {User user = new User();user.setId((Integer) list.get(i)[0]);user.setUsername((String) list.get(i)[1]);user.setPassword((String) list.get(i)[2]);user.setEnable((Integer) list.get(i)[3]);System.out.println(user.toString()); }} catch (Exception e) { e.printStackTrace();} }}3.實現效果

詳解Springboot下載Excel的三種方式

🔥4.總結

總體看來:當excel需要在瀏覽器下載時,使用alibaba的easyexcel最快最方便,并且注意需要設置response格式

到此這篇關于詳解Springboot下載Excel的三種方式的文章就介紹到這了,更多相關Springboot下載Excel內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: excel
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
欧美不卡高清一区二区三区| 国产精品午夜一区二区三区| 中文在线免费视频| 国产一区二区三区四区五区 | 97精品国产| 国产精品伦理久久久久久| 91嫩草亚洲精品| 日韩福利一区| 在线视频观看日韩| 午夜精品网站| 在线午夜精品| 日韩影院精彩在线| 中文精品在线| 日韩在线卡一卡二| 青青草91视频| 国产精品久久久久久妇女 | 中文在线а√天堂| 亚洲第一区色| 天堂成人国产精品一区| 亚洲tv在线| 欧美精品三级在线| 国产精品porn| 日韩av片子| 欧美日韩黑人| 亚洲免费福利一区| 日韩精选在线| 国产日产一区| 97精品国产一区二区三区| 亚洲午夜精品久久久久久app| 免费日韩一区二区| 日韩欧美中文在线观看| 国产精品激情| 亲子伦视频一区二区三区| 黄色免费成人| 欧美一级网站| 国产精品a久久久久| 国产精品不卡| 亚洲精品小说| 日韩高清不卡一区| 国产成人精选| 午夜国产精品视频| 亚洲1区在线观看| 久久久91麻豆精品国产一区| 亚洲第一精品影视| 青青伊人久久| 在线看片国产福利你懂的| 1024精品久久久久久久久| 亚洲18在线| 国产精品成久久久久| 夜久久久久久| 老牛国内精品亚洲成av人片| 欧美日韩国产高清电影| 日本视频一区二区| 天堂√8在线中文| 蜜臀av一区二区在线免费观看 | 欧美 日韩 国产精品免费观看| 亚洲制服一区| 91亚洲一区| 亚洲狼人精品一区二区三区| 国产一区二区三区不卡视频网站 | 国产美女久久| 99视频精品视频高清免费| 国产农村妇女精品一二区| 美女精品视频在线| 五月精品视频| 欧美aa在线视频| 免费看的黄色欧美网站| 国产中文字幕一区二区三区| 国产精品免费看| 精品视频一区二区三区四区五区 | 美女av一区| 99视频在线精品国自产拍免费观看| 日韩国产在线一| 久久青草久久| 日韩av一区二| 九九久久电影| 国产66精品| 日韩高清在线不卡| 午夜欧美精品| 久久99影视| 免费av一区| 日本视频一区二区| 亚洲精品小说| 91一区二区三区四区| 日产欧产美韩系列久久99| 日韩精品永久网址| 国产欧美日韩亚洲一区二区三区| 欧美在线综合| 精品视频免费| 亚洲久久视频| 国产综合婷婷| 久久久久久一区二区| 日本a级不卡| 国产视频欧美| 中文字幕在线免费观看视频| 国产欧美午夜| 最新国产精品视频| 好看的av在线不卡观看| 日韩免费在线| 麻豆视频一区二区| 91精品一区| 少妇精品久久久| 在线亚洲成人| 蜜臀91精品国产高清在线观看| 欧美在线看片| 丝袜脚交一区二区| 在线视频观看日韩| 中文字幕在线免费观看视频| 欧美激情三区| 国产精品亚洲综合久久| 日本精品国产| 日韩有吗在线观看| 免费观看日韩电影| 婷婷亚洲五月色综合| 99久久99久久精品国产片果冰 | 91综合视频| 国产精品一区二区三区av麻| 亚洲精品国产日韩| 男女男精品网站| 久久国产精品成人免费观看的软件| 国产三级精品三级在线观看国产| 国产偷自视频区视频一区二区| 久久影院一区| 久久婷婷丁香| 精品免费av在线| 蜜桃精品在线| 日韩在线中文| 亚洲日本网址| 91亚洲国产高清| 国产高潮在线| 欧美日韩国产观看视频| 成人高清一区| 欧美激情国产在线| 麻豆视频在线观看免费网站黄| 福利一区二区三区视频在线观看| 久久久久观看| 国产一区二区三区黄网站 | 麻豆久久久久久| 久久精品国产精品亚洲毛片| 国产乱子精品一区二区在线观看| 国产精品丝袜在线播放| 欧美精品导航| 久久精品色播| 国产精品亚洲综合在线观看| 国产精品嫩模av在线| 蜜桃精品视频| 精品理论电影在线| 理论片午夜视频在线观看| а√在线中文在线新版| 午夜av成人| 亚洲激情黄色| 蜜桃91丨九色丨蝌蚪91桃色 | 欧美国产另类| 国产精品成久久久久| 日韩精品欧美| 日韩一区二区免费看| 久久成人亚洲| 石原莉奈在线亚洲二区| 日韩1区2区3区| 开心激情综合| 国产一区精品福利| 丝袜av一区| 欧美日韩免费观看视频| 99精品美女| 亚洲精品美女91| 国产毛片久久久| 日本欧美国产| 91精品99| 日韩欧美精品一区二区综合视频| 精品美女在线视频| 免播放器亚洲一区| 久草免费在线视频| 日韩精品一级二级| 日韩电影免费在线观看| 日本不卡不码高清免费观看| 亚洲h色精品| 国产精品亚洲欧美一级在线| 宅男噜噜噜66国产日韩在线观看| 免费视频一区二区三区在线观看 | 视频一区中文字幕| 色婷婷亚洲mv天堂mv在影片| 亚洲精品激情| 亚洲成人av观看| 国产精品扒开腿做爽爽爽软件| 性欧美精品高清| 四虎成人av| 国产欧美一区| 男女激情视频一区| 久久精品青草| 精品视频国内| 91精品丝袜国产高跟在线| 免费成人网www| 福利一区二区免费视频| 久久国产乱子精品免费女| 三级欧美在线一区| 国产精品99一区二区| 国产成人调教视频在线观看| 亚洲精品大全| 野花国产精品入口| 91精品久久久久久久久久不卡|