java使用poi把從資料庫中取出的資料寫入到excel檔案中並儲存到指定檔案路徑
阿新 • • 發佈:2018-11-14
有時候我們要把從資料庫中取出的資料匯入到excel中,使取到的資料看起來更加的直觀和方便,在java中如何實現取到的資料匯入到excel中呢?以下就是使用poi工具吧資料寫入excel檔案中的解決方法:
Excel表格副檔名有.xlsx和.xls兩種格式
百度上對兩種檔案的介紹有很多就不一一列舉,基本的不同總結下來有以下幾點:
在java中讀取和寫入.xls格式使用maven匯入jar包:
<dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.16</version> </dependency>
在java中讀取和寫入.xlsx格式使用maven匯入jar包:
<dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>3.16</version> </dependency>
然後就可以使用jar包讀取excel檔案,並儲存到本地指定的位置,首先把從資料庫中取出的資訊放到一個list中,然後從list中一一讀取資料,寫入到excel檔案中,由於後面還有需求約定好使用.xlsx檔案,這裡生成的excel檔案型別便是.xlsx檔案,如果需求對檔案型別沒有要求,儘量生成.xls檔案。
/** * * @param stuList 從資料庫中查詢需要匯入excel檔案的資訊列表 * @return 返回生成的excel檔案的路徑 * @throws Exception */ public static String stuList2Excel(List<Student> stuList) throws Exception { SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd"); SimpleDateFormat sdf1 = new SimpleDateFormat("yyyyMMdd hhmmss"); Workbook wb = new XSSFWorkbook(); //標題行抽出欄位 String[] title = {"序號","學號", "姓名", "性別", "入學時間", "住址", "手機號", "其他資訊"}; //設定sheet名稱,並建立新的sheet物件 String sheetName = "學生資訊一覽"; Sheet stuSheet = wb.createSheet(sheetName); //獲取表頭行 Row titleRow = stuSheet.createRow(0); //建立單元格,設定style居中,字型,單元格大小等 CellStyle style = wb.createCellStyle(); Cell cell = null; //把已經寫好的標題行寫入excel檔案中 for (int i = 0; i < title.length; i++) { cell = titleRow.createCell(i); cell.setCellValue(title[i]); cell.setCellStyle(style); } //把從資料庫中取得的資料一一寫入excel檔案中 Row row = null; for (int i = 0; i < stuList.size(); i++) { //建立list.size()行資料 row = stuSheet.createRow(i + 1); //把值一一寫進單元格里 //設定第一列為自動遞增的序號 row.createCell(0).setCellValue(i + 1); row.createCell(1).setCellValue(stuList.get(i).getStuId()); row.createCell(2).setCellValue(stuList.get(i).getStuName()); row.createCell(3).setCellValue(stuList.get(i).getGender()); //把時間轉換為指定格式的字串再寫入excel檔案中 if (stuList.get(i).getEnterTime() != null) { row.createCell(4).setCellValue(sdf.format(stuList.get(i).getEnterTime())); } row.createCell(5).setCellValue(stuList.get(i).getAddress()); row.createCell(6).setCellValue(stuList.get(i).getPhone()); row.createCell(7).setCellValue(stuList.get(i).getOtherInfo()); } //設定單元格寬度自適應,在此基礎上把寬度調至1.5倍 for (int i = 0; i < title.length; i++) { stuSheet.autoSizeColumn(i, true); stuSheet.setColumnWidth(i, stuSheet.getColumnWidth(i) * 15 / 10); } //獲取配置檔案中儲存對應excel檔案的路徑,本地也可以直接寫成F:excel/stuInfoExcel路徑 String folderPath = ResourceBundle.getBundle("systemconfig").getString("downloadFolder") + File.separator + "stuInfoExcel"; //建立上傳檔案目錄 File folder = new File(folderPath); //如果資料夾不存在建立對應的資料夾 if (!folder.exists()) { folder.mkdirs(); } //設定檔名 String fileName = sdf1.format(new Date()) + sheetName + ".xlsx"; String savePath = folderPath + File.separator + fileName; // System.out.println(savePath); OutputStream fileOut = new FileOutputStream(savePath); wb.write(fileOut); fileOut.close(); //返回檔案儲存全路徑 return savePath; }
注意事項:
- 這裡的資料使用的是資料庫中的測試資料,生產環境資料欄位會更多,資料會更復雜,要根據不同的資料進行處理。
- poi工具對生成的單元格寬度即使設定了自適應,有時寬度也無法顯示全部資料,所以在此基礎上,根據情況把單元格寬度再增加一些,這裡是把單元格寬度再增加1.5倍。
- 檔案儲存在同一個資料夾中會導致重名,所以檔名中最好包含時間,這樣的話在單人使用的時候迴避免出現檔名重複的情況。
根據返回的路徑名手動找到的檔案:
得到的excel資料如下
以上就是從資料庫中讀取資料寫入excel檔案並儲存到指定位置,後續還有前端請求下載excel檔案,後端的處理方法;前端上傳excel檔案,讀取其中的檔案資訊,並把對應的資料取出存入到資料庫中......
未完待續。。。。。。