1. 程式人生 > >java 專案利用POI匯出excel總結

java 專案利用POI匯出excel總結

在專案中遇到需要把計劃檢修的專案匯出 使用的是Apache POI 對資料進行匯出

1.通過單元格格式來設定表格樣式

  • 對於表格的表頭是固定的 所以先把表頭設定為定值
Workbook workbook = new HSSFWorkbook(); //新建excel表格
Sheet sheet = workbook.createSheet("維修-檢修計劃詳情"); //新建工作簿
Row row = sheet.createRow(0); //新建第一行為表格表頭
row.createCell(0).setCellValue("檢修記錄ID");
row.createCell(1).setCellValue
("檢修單號"); row.createCell(2).setCellValue("記錄來源"); row.createCell(3).setCellValue("所屬部門"); row.createCell(4).setCellValue("部門名稱");
  • 然後通過迴圈遍歷自動生成下面資料行
for (int i = 0; list != null && i < list.size(); i++) {
    row = sheet.createRow(i+1);//迴圈生成新的行
    String overhaulRecordId = list.get(i).get
("OVERHAUL_REC_ID").toString(); mtOverhaulRecord = iOverhaulRecordService.findByKey(new Long(overhaulRecordId)); ExcelUtil.setCellValue(row, 0 , changNulltoString(list.get(i).get("OVERHAUL_REC_ID"))); ExcelUtil.setCellValue(row, 1 , changNulltoString(list.get(i).get("OVERHAUL_REC_NO"))); ExcelUtil.setCellValue
(row, 3 , changNulltoString(list.get(i).get("DEPT_ID"))); ExcelUtil.setCellValue(row, 4 , changNulltoString(list.get(i).get("DEPT_NAME"))); }
  • 最後匯出
super.writeExcel("recordList.xls", workbook);

這樣匯出的表格完全沒有格式,無法進行列印

  • 所以需要進行排版設計 通過設定單元格格式來調整
CellStyle cellStyle = workbook.createCellStyle();//新建單元格格式
cellStyle.setWrapText(true);//是否自動換行
cellStyle.setAlignment(HSSFCellStyle.ALIGN_LEFT);//設定內容左對齊
cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);//設定垂直居中

int length = row.getLastCellNum();
for (int j = 0; j < length; j++) {//遍歷row行的每一個單元格
    row.getCell(j).setCellStyle(cellStyle);//設定單元格格式
}

在實際使用中,列印時需要設定列印格式 橫版,頁邊距等需要一一設定,網上的資料很多,在這實現一個需求,由於表格內容過長需要分頁顯示那麼表頭在每一頁重複出現,需要使用setRepeatingRowsAndColumns( )方法

//五個引數分別是:第幾張工作表、開始列、結束列、開始行、結束行 這一區域即為表頭
workbook.setRepeatingRowsAndColumns(0, 0, 12, 1, 3);

2.通過上傳excel模板來設定表格樣式

這樣一個表格 這麼多格式感覺很麻煩這時候 使用excel模板來匯出資料就顯得方便許多了

使用模板就涉及到使用伺服器上傳的模板來填充資料
首先要獲取專案結構中的模板檔案,在實際獲取中遇到一些問題

這裡寫圖片描述

  • 要從專案的web\UploadFile\excelModel中獲取模板檔案
String excelPath = request.getRealPath("/") + "UploadFiles" + File.separator + "excelModel" + File.separator+"overhaulprocess.xls";
FileInputStream excelFileInputStream = new FileInputStream(excelPath);
HSSFWorkbook workbook = new HSSFWorkbook(excelFileInputStream);

使用separator來加入檔案路徑分隔符,避免出現linux系統和windows系統的路徑差異導致找不到檔案的錯誤

windows和linux檔案路徑差異

比如要在temp目錄下新建一個test.txt檔案  
//在windows中就需要這麼寫
File file = new File("c:\temp\test.txt");
//在linux中就需要寫
File file2 = new File("/temp/test.txt");
//考慮跨平臺性就需要使用separtor來代替名稱分隔符
File myFile = new File("C:" + File.separator + "temp" + File.separator , "test.txt");

使用檔案輸入流來獲取workbook而不是新建workbook這樣就省去了設定格式的過程
在模板檔案中設定好表頭的內容和格式 以及列印設定 頁面設定

  • 設定表頭在每頁開頭出現

這裡寫圖片描述

之後的過程和之前一樣省去了佈局的大量時間 十分推薦使用 記得修改格式設定時不要單單修改本地模板,修改本地模板一定要記得重新上傳模板