Java POI 操作Excel 應用(一)

此應用是利用POI動態生成複雜表頭,結果如下


首先介紹幾個重要的類

org.apache.poi.hssf.usermodel.HSSFWorkbook;//工作簿
org.apache.poi.hssf.usermodel.HSSFSheet;   //sheet頁
org.apache.poi.hssf.usermodel.HSSFRow;     //行
org.apache.poi.hssf.usermodel.HSSFCell;    //單元格 

以上是創建一個Excel文檔必不可少的類。

圖構造:

HSSFWorkbook workBook = new HSSFWorkbook();//創建一個工作薄對象
HSSFSheet sheet = workBook.createSheet("Page 1");//創建sheet頁
HSSFRow headRow = sheet.createRow((short) 1);//創建標題行 
//設置單元格範圍
CellRangeAddress cra0 = new CellRangeAddress(1,(short)(7),0,0);
CellRangeAddress cra1 = new CellRangeAddress(1,(short)2,(short)(1),(short)1);
CellRangeAddress cra2 = new CellRangeAddress(1,(short)2,(short)(2),(short)2);
CellRangeAddress cra3 = new CellRangeAddress(1,(short)2,(short)(3),(short)3);
CellRangeAddress cra4 = new CellRangeAddress(1, 1, 4, 6);
CellRangeAddress cra7 = new CellRangeAddress(1,(short)2,(short)(7),(short)7);
CellRangeAddress cra8 = new CellRangeAddress(1,(short)2,(short)(8),(short)8);
                     
//設置邊框工具類
public void setBorder(CellRangeAddress cellRangeAddress, Sheet sheet,  
            Workbook wb) throws Exception {  
        RegionUtil.setBorderLeft(1, cellRangeAddress, sheet, wb);  
        RegionUtil.setBorderBottom(1, cellRangeAddress, sheet, wb);  
        RegionUtil.setBorderRight(1, cellRangeAddress, sheet, wb);  
        RegionUtil.setBorderTop(1, cellRangeAddress, sheet, wb);  
          
}  


//根據單元格範圍合併單元格
sheet.addMergedRegion(cra0);
sheet.addMergedRegion(cra1);
sheet.addMergedRegion(cra2);
sheet.addMergedRegion(cra3);
sheet.addMergedRegion(cra4);
sheet.addMergedRegion(cra5);
sheet.addMergedRegion(cra6);
sheet.addMergedRegion(cra7);
sheet.addMergedRegion(cra8);
    //設置邊框
    this.setBorder(cra0, sheet, workBook);
this.setBorder(cra1, sheet, workBook);
this.setBorder(cra2, sheet, workBook);
this.setBorder(cra3, sheet, workBook);
this.setBorder(cra4, sheet, workBook);
this.setBorder(cra5, sheet, workBook);
this.setBorder(cra6, sheet, workBook);
this.setBorder(cra7, sheet, workBook);
this.setBorder(cra8, sheet, workBook);
ArrayList<String> fieldName = DataSource.getTableName();     
for (int j = 0; j < fieldName.size(); j++) {//循環excel的標題
cell = headRow.createCell(j);//使用行對象創建列對象,0表示第1列

/**************對標題添加樣式begin********************/

//設置列的寬度/
sheet.setColumnWidth(j, 6000);
cellStyle = workBook.createCellStyle();//創建列的樣式對象

//設置內容居中
cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER_SELECTION);
cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
//設置列樣式
cell.setCellStyle(cellStyle);
HSSFFont font = workBook.createFont();//創建字體對象
//字體加粗
font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
cellStyle.setFont(font);

/**************對標題添加樣式end********************/
String ch_title = "三座標";
//添加樣式
cell.setCellType(HSSFCell.CELL_TYPE_STRING);
if(fieldName.get(j) != null){
//將創建好的樣式放置到對應的單元格中
cell.setCellStyle(cellStyle);
if(j!=4&&j!=5&&j!=6){
	cell.setCellValue((String) fieldName.get(j));//爲標題中的單元格設置值
}else{
    cell.setCellValue(ch_title);						
}
}else{
cell.setCellValue("-");
}
}
headRow = sheet.createRow((short) 1);
//設置x,y,z表頭
for (int j = 4; j < 7; j++) {
cell = headRow.createCell(j);
cell.setCellValue(fieldName.get(j));
cell.setCellStyle(cellStyle);
}

//表頭下部(特徵)
headRow = sheet.createRow((short)(rows+4));
cell = headRow.createCell(1);
cell.setCellValue("特徵");
cell.setCellStyle(cellStyle);

下面要注意數據源轉化:

對於Java開發,一般拿到的數據都是對象化的,而我們需要的是對象的屬性轉換爲String直接寫入到對應的excel單元格中。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章