java使用poi把從數據庫中取出的數據寫入到excel文件中並保存到指定文件路徑

  有時候咱們要把從數據庫中取出的數據導入到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;
}

   注意事項:前端

  1. 這裏的數據使用的是數據庫中的測試數據,生產環境數據字段會更多,數據會更復雜,要根據不一樣的數據進行處理。
  2. poi工具對生成的單元格寬度即便設置了自適應,有時寬度也沒法顯示所有數據,因此在此基礎上,根據狀況把單元格寬度再增長一些,這裏是把單元格寬度再增長1.5倍。
  3. 文件保存在同一個文件夾中會致使重名,因此文件名中最好包含時間,這樣的話在單人使用的時候迴避免出現文件名重複的狀況。

  根據返回的路徑名手動找到的文件:java

 

  獲得的excel數據以下數據庫

 

   以上就是從數據庫中讀取數據寫入excel文件並保存到指定位置,後續還有前端請求下載excel文件,後端的處理方法;前端上傳excel文件,讀取其中的文件信息,並把對應的數據取出存入到數據庫中......apache

  未完待續。。。。。。後端

相關文章
相關標籤/搜索