【工具类】JAVA POI 代码导出表格的两种办法(代码全注释,小白也不怕)
生活随笔
收集整理的這篇文章主要介紹了
【工具类】JAVA POI 代码导出表格的两种办法(代码全注释,小白也不怕)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
講點廢話,吐個槽
最近有個要求,表格導出,之前也搞過,但覺得每次都到處找太麻煩了,有些大佬,展示部分代碼,看著挺多個類,復制粘貼運行就報錯,一檢查,少個關鍵類,沒辦法跑,要么就是標注個什么什么大全,下載打錢,雖然白嫖不好,畢竟別人學習總結成果,但我爽啊,一直白嫖一直爽,咱自己翻了點資料,總結了一下導出表格大概也就兩種情況
標準表格
如果導出的這種表格,那么就是很簡單的事,上代碼
準備
pom文件
<dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>3.17</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>3.17</version></dependency>實體類
@Data public class Member {/*** 學號*/private Integer code;/*** 姓名*/private String name;/*** 年齡*/private Integer age;/*** 生日*/private Date birth;工具類方法
public static void createExcel(Map<String, List<String>> map, String[] strArray) {// 創建一個webbook,對應一個Excel文件HSSFWorkbook wb = new HSSFWorkbook();// 在webbook中添加一個sheet,對應Excel文件中的sheetHSSFSheet sheet = wb.createSheet("sheet1");// 在sheet中添加表頭第0行,注意老版本poi對Excel的行數列數有限制shortHSSFRow row = sheet.createRow(0);// 添加標題行HSSFCell cell = null;for (int i = 0; i < strArray.length; i++) {// 獲取行內對應單元格cell = row.createCell(i);// 單元格賦值cell.setCellValue(strArray[i]);}// 寫入實體數據,實際應用中這些數據從數據庫得到,list中字符串的順序必須和數組strArray中的順序一致int i = 0;for (String str : map.keySet()) {// 除去標題行,遍歷獲取后面行號對象row = sheet.createRow(i + 1);// 獲取要添加到單元格的集合數據List<String> list = map.get(str);// 遍歷當前行內所有單元格for (int j = 0; j < strArray.length; j++) {// 創建單元格,并設置值row.createCell(j).setCellValue(list.get(j));}// 第六步,將文件存到指定位置try {FileOutputStream fout = new FileOutputStream("D:/國家機密.xls");wb.write(fout);fout.close();} catch (Exception e) {e.printStackTrace();}i++;}}測試代碼
/*** @Author: wanyuan* Date: 2020/8/26 16:23*/ public class DownloadExcel {public static void main(String[] args) {Map<String, List<String>> memberMap = getMember();String[] strArray = excelTitle();ExcelUtil.createExcel(memberMap, strArray);}/*** 初始化數據,將會被存儲到excel表格中** @return* @throws Exception*/private static Map<String, List<String>> getMember() {List<Member> list = new ArrayList<Member>();Map<String, List<String>> map = new HashMap<String, List<String>>();SimpleDateFormat df = new SimpleDateFormat("yyyy-mm-dd");try {Member user1 = new Member(1, "趙麗穎", 18, df.parse("2002-10-16"));Member user2 = new Member(2, "娜美", 20, df.parse("2000-08-19"));Member user3 = new Member(3, "漢克庫", 25, df.parse("1995-11-22"));list.add(user1);list.add(user2);list.add(user3);for (int i = 0; i < list.size(); i++) {ArrayList<String> members = new ArrayList<String>();members.add(list.get(i).getCode() + "");members.add(list.get(i).getName());members.add(list.get(i).getAge() + "");members.add(df.format(list.get(i).getBirth()));map.put(list.get(i).getCode() + "", members);}} catch (ParseException e) {e.printStackTrace();}return map;}/*** 創建標題行數據*/public static String[] excelTitle() {String[] strArray = { "學號", "姓名", "年齡", "生日" };return strArray;} }輸出結果
非正常表格
非常簡單的一個例子,填寫的簡歷,讓導出成為表格,那就不是循環遍歷,挨著存入的了,而是需要人為控制表格的填寫
所以需要一個模板文件,如:
工具類
public static void readExcel(String[] strArray){try{// Excel模板文件路徑String temlateRealPath = "D:/國家機密.xls";//讀取模板文件創建Excel表格對象HSSFWorkbook workbook = new HSSFWorkbook(new FileInputStream(new File(temlateRealPath)));// 獲取模板文件第一個sheet,對應Excel文件中的sheetHSSFSheet sheet = workbook.getSheetAt(0);// 根據要求,可以得出結論,我們需要填寫的單元格是2-B,2-D,3-B,3-D// 獲取對應行號HSSFRow row = sheet.getRow(1);// 對應單元格填入數據row.getCell(1).setCellValue(strArray[0]);row.getCell(3).setCellValue(strArray[1]);row = sheet.getRow(2);row.getCell(1).setCellValue(strArray[2]);row.getCell(3).setCellValue(strArray[3]);try {// 輸出流FileOutputStream fout = new FileOutputStream("D:/維多利亞的秘密.xls");workbook.write(fout);fout.close();} catch (Exception e) {e.printStackTrace();}}catch (Exception e){e.printStackTrace();}}測試代碼
/*** @Author: wanyuan* Date: 2020/8/26 16:23*/ public class DownloadExcel {public static void main(String[] args) {String[] strArray = excelTitle();ExcelUtil.readExcel(strArray);}/*** 準備數據*/public static String[] excelTitle() {String[] strArray = { "趙麗穎", "18", "160", "2002-10-16" };return strArray;} }輸出結果
總結
- 標準表格導出很簡單,高興就好
- 奇奇怪怪的表格導出,沒發現其他什么好一點的辦法,如果有大佬知道別的好辦法,可以告訴小弟一聲
- 第二個工具類導出方法具體邏輯根據模板文件來定,但愿你們沒有這種需求(PS:對提這個需求的產品經理說句,一路走好,愿天堂沒有痛苦,愿天堂沒有紛爭)
總結
以上是生活随笔為你收集整理的【工具类】JAVA POI 代码导出表格的两种办法(代码全注释,小白也不怕)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【面试题】使用 HashMap 还是 T
- 下一篇: 【面试题】Redis中是如何实现分布式锁