日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

spring boot实现导出数据到excel

發布時間:2024/10/5 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 spring boot实现导出数据到excel 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.導入依賴;

<!--數據導出依賴 excel--> <!-- https://mvnrepository.com/artifact/org.apache.poi/poi --> <dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>3.17</version> </dependency> <!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml --> <dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>3.17</version> </dependency> <!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml-schemas --> <dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml-schemas</artifactId><version>3.17</version> </dependency>

2.設置excel文件的表頭

import java.util.ArrayList; import java.util.HashMap; import java.util.Map;/*** @desc:數據導出,生成excel文件時的列名稱集合* @author: chao* @time: 2018.6.11*/ public class ColumnTitleMap {private Map<String, String> columnTitleMap = new HashMap<String, String>();private ArrayList<String> titleKeyList = new ArrayList<String> ();public ColumnTitleMap(String datatype) {switch (datatype) {case "passenger":initPassengerColu();initPassengerTitleKeyList();break;default:break;}}/*** mysql用戶表需要導出字段--顯示名稱對應集合*/private void initPassengerColu() {columnTitleMap.put("idCard", "身份證號");columnTitleMap.put("passName", "乘客姓名");columnTitleMap.put("sex", "性別");columnTitleMap.put("birdate", "出生日期");columnTitleMap.put("phone", "手機號");columnTitleMap.put("birthplace", "出生地戶籍");columnTitleMap.put("residence", "現住址");columnTitleMap.put("source", "注冊來源");}/*** mysql用戶表需要導出字段集*/private void initPassengerTitleKeyList() {titleKeyList.add("idCard");titleKeyList.add("passName");titleKeyList.add("sex");titleKeyList.add("birdate");titleKeyList.add("phone");titleKeyList.add("birthplace");titleKeyList.add("residence");titleKeyList.add("source");}public Map<String, String> getColumnTitleMap() {return columnTitleMap;}public ArrayList<String> getTitleKeyList() {return titleKeyList;} }

3.導出工具類

把對象轉MAp

import java.lang.reflect.Field; import java.util.HashMap; import java.util.Map;public class ObjToMapUtil {/*** 對象轉map* @param obj* @return*/public Map<String, Object> objToMap(Object obj) {Map<String, Object> map = new HashMap<String, Object>();Field[] fields = obj.getClass().getDeclaredFields(); // 獲取f對象對應類中的所有屬性域for (int i = 0, len = fields.length; i < len; i++) {String varName = fields[i].getName();varName = varName.toLowerCase(); // 將key置為小寫,默認為對象的屬性try {boolean accessFlag = fields[i].isAccessible(); // 獲取原來的訪問控制權限fields[i].setAccessible(true); // 修改訪問控制權限Object o = fields[i].get(obj); // 獲取在對象f中屬性fields[i]對應的對象中的變量if (o != null){map.put(varName, o.toString());}fields[i].setAccessible(accessFlag); // 恢復訪問控制權限} catch (IllegalArgumentException ex) {ex.printStackTrace();} catch (IllegalAccessException ex) {ex.printStackTrace();}}return map;}}

把查詢到的數據讀入excel

import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.streaming.SXSSFWorkbook; import org.springframework.stereotype.Service;import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.OutputStream; import java.util.ArrayList; import java.util.List; import java.util.Map;/*** @desc:數據導出,生成excel文件* @author: chao* @time: 2018.6.12*/ @Service public class ExportExcelUtil {public OutputStream expoerDataExcel(HttpServletResponse response, ArrayList<String> titleKeyList, Map<String, String> titleMap, List<Map<String,Object>> src_list) throws IOException {String xlsFile_name = System.currentTimeMillis() + ".xlsx"; //輸出xls文件名稱//內存中只創建100個對象Workbook wb = new SXSSFWorkbook(100); //關鍵語句Sheet sheet = null; //工作表對象Row nRow = null; //行對象Cell nCell = null; //列對象int rowNo = 0; //總行號int pageRowNo = 0; //頁行號for (int k=0;k<src_list.size();k++) {Map<String,Object> srcMap = src_list.get(k);//寫入300000條后切換到下個工作表if(rowNo%300000==0){wb.createSheet("工作簿"+(rowNo/300000));//創建新的sheet對象sheet = wb.getSheetAt(rowNo/300000); //動態指定當前的工作表pageRowNo = 0; //新建了工作表,重置工作表的行號為0// -----------定義表頭-----------nRow = sheet.createRow(pageRowNo++);// 列數 titleKeyList.size()for(int i=0;i<titleKeyList.size();i++){Cell cell_tem = nRow.createCell(i);cell_tem.setCellValue(titleMap.get(titleKeyList.get(i)));}rowNo++;// ---------------------------}rowNo++;nRow = sheet.createRow(pageRowNo++); //新建行對象// 行,獲取cell值for(int j=0;j<titleKeyList.size();j++){nCell = nRow.createCell(j);if (srcMap.get(titleKeyList.get(j)) != null) {if("taxidriver".equals(titleKeyList.get(j))){if("0".equals(srcMap.get(titleKeyList.get(j)).toString())){nCell.setCellValue("否");}else if("1".equals(srcMap.get(titleKeyList.get(j)).toString())){nCell.setCellValue("是");}}else if("drivergender".equals(titleKeyList.get(j))){if("1".equals(srcMap.get(titleKeyList.get(j)).toString())){nCell.setCellValue("男");}else if("2".equals(srcMap.get(titleKeyList.get(j)).toString())){nCell.setCellValue("女");}else if("9".equals(srcMap.get(titleKeyList.get(j)).toString())){nCell.setCellValue("未知");}}else {nCell.setCellValue(srcMap.get(titleKeyList.get(j)).toString());}} else {nCell.setCellValue("");}}}response.setContentType("application/vnd.ms-excel;charset=utf-8");response.setHeader("Content-disposition", "attachment;filename=" + xlsFile_name);response.flushBuffer();OutputStream outputStream = response.getOutputStream();wb.write(response.getOutputStream());wb.close();outputStream.flush();outputStream.close();return outputStream;} }

4.導出數據到excel的controller

@PostMapping("/passenger/excel/download") public Result exportPassengerData(String phone,String start,String end,String source,String state,HttpServletResponse response){try {Map<String,Object> map = new HashMap<>(); //查詢需要導出的數據List<Passenger> passengerList = passengerService.getDao().getPassengerByCondition(phone,start,end,source,state);List<Map<String,Object>> list = new ArrayList<>(); //把對象轉mappassengerList.forEach(passenger -> {Map<String, Object> item = new ObjToMapUtil().objToMap(passenger);list.add(item);});ArrayList<String> titleKeyList= new ColumnTitleMap("passenger").getTitleKeyList();Map<String, String> titleMap = new ColumnTitleMap("passenger").getColumnTitleMap(); //導出數據到excelOutputStream outputStream = new ExportExcelUtil().expoerDataExcel(response, titleKeyList, titleMap, list);map.put("data",outputStream);return Result.ok(map);}catch (Exception e){e.printStackTrace();return Result.fail(901,"導出乘客信息失敗!");} }

?

總結

以上是生活随笔為你收集整理的spring boot实现导出数据到excel的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。