1. 程式人生 > >java使用poi把從資料庫中取出的資料寫入到excel檔案中並儲存到指定檔案路徑

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. 檔案儲存在同一個資料夾中會導致重名,所以檔名中最好包含時間,這樣的話在單人使用的時候迴避免出現檔名重複的情況。

  根據返回的路徑名手動找到的檔案:

 

  得到的excel資料如下

 

   以上就是從資料庫中讀取資料寫入excel檔案並儲存到指定位置,後續還有前端請求下載excel檔案,後端的處理方法;前端上傳excel檔案,讀取其中的檔案資訊,並把對應的資料取出存入到資料庫中......

  未完待續。。。。。。

鄭州市不孕不育醫院

鄭州不孕不育

鄭州男科醫院