Java-POI-Excel導出 包含跨行跨列 Excel表格樣式格式化。

首先是頁面效果展示:

格式化代碼優化:

String list[] = { "序號", "D", "S", "D", "G", "C", "D", "D", "J" , "H", "K" };// 設置表頭
String list1[] = { "E", "F",};// 設置表頭
String list2[] = { "月度考核"};// 設置表頭

HSSFWorkbook wb = new HSSFWorkbook();
HSSFSheet sheet = wb.createSheet();

//設置跨行跨列格式:CellRangeAddress(A, B,C,D) A:開始行,B:結束行,C:開始列,D:結束列
sheet.addMergedRegion(new CellRangeAddress(2, 3, 0, 0));//
sheet.addMergedRegion(new CellRangeAddress(2, 3, 1, 1));//
sheet.addMergedRegion(new CellRangeAddress(2, 3, 2, 2));//
sheet.addMergedRegion(new CellRangeAddress(2, 3, 3, 3));//
sheet.addMergedRegion(new CellRangeAddress(2, 3, 4, 4));//
sheet.addMergedRegion(new CellRangeAddress(2, 3, 5, 5));//
sheet.addMergedRegion(new CellRangeAddress(2, 3, 8, 8));//
sheet.addMergedRegion(new CellRangeAddress(2, 3, 9, 9));//
sheet.addMergedRegion(new CellRangeAddress(2, 3, 10, 10));//
sheet.addMergedRegion(new CellRangeAddress(2, 2, 6, 7));//
sheet.addMergedRegion(new CellRangeAddress(0, 1, 0, 10));//

HSSFRow row = sheet.createRow(2); // 創建第一行(標題行)
HSSFRow row1 = sheet.createRow(3); // 創建第一行(標題行)

HSSFRow row3 = sheet.createRow(0);

// 設置單元格表單內容樣式
HSSFCellStyle style_nr = wb.createCellStyle();


style_nr.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 創建一個居中格式
style_nr.setBorderBottom(HSSFCellStyle.BORDER_THIN); // 設置單元格下邊框
style_nr.setBorderTop(HSSFCellStyle.BORDER_THIN); // 設置單元格上邊框
style_nr.setBorderLeft(HSSFCellStyle.BORDER_THIN); // 設置單元格上邊框
style_nr.setBorderRight(HSSFCellStyle.BORDER_THIN); // 設置單元格右邊框
style_nr.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 創建一個居中格式
style_nr.setFillBackgroundColor(Font.COLOR_NORMAL);

// 設置單元格表單標題樣式
HSSFCellStyle style_bt = wb.createCellStyle();
HSSFFont font = wb.createFont();
font.setFontHeightInPoints((short) 12);
font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);// 設置加粗
style_bt.setBorderBottom(HSSFCellStyle.BORDER_THIN); // 設置單元格下邊框
style_bt.setBorderTop(HSSFCellStyle.BORDER_THIN); // 設置單元格上邊框
style_bt.setBorderLeft(HSSFCellStyle.BORDER_THIN); // 設置單元格上邊框
style_bt.setBorderRight(HSSFCellStyle.BORDER_THIN); // 設置單元格右邊框
style_bt.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 創建一個居中格式
style_bt.setVerticalAlignment(HSSFCellStyle.ALIGN_CENTER_SELECTION);//創建跨行居中格式

style_bt.setFont(font);

// 設置單元格表單標題樣式
HSSFCellStyle style_bt_no = wb.createCellStyle();
HSSFFont font_ = wb.createFont();
font_.setFontHeightInPoints((short) 23);
font_.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);// 設置加粗
style_bt_no.setBorderBottom(HSSFCellStyle.BORDER_THIN); // 設置單元格下邊框
style_bt_no.setBorderTop(HSSFCellStyle.BORDER_THIN); // 設置單元格上邊框
style_bt_no.setBorderLeft(HSSFCellStyle.BORDER_THIN); // 設置單元格上邊框
style_bt_no.setBorderRight(HSSFCellStyle.BORDER_THIN); // 設置單元格右邊框


style_bt_no.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 創建一個居中格式
style_bt_no.setVerticalAlignment(HSSFCellStyle.ALIGN_CENTER_SELECTION);//創建跨行居中格式
style_bt_no.setFont(font_);


for (int i = 0; i < list2.length; i++) {// 創建第一行(標題行的第一列)
HSSFCell cell = row3.createCell(i);
cell.setCellValue(list2[0]);
cell.setCellStyle(style_bt_no);
}

for (int i = 0; i < list.length; i++) {// 創建第二行(標題行的第一列)
HSSFCell cell = row.createCell(i);
cell.setCellValue(list[i]);
cell.setCellStyle(style_bt);
}

for(int i = 0; i < list.length; i++){// 創建第三行(標題行的第二列)
if(i==6){
HSSFCell cell = row1.createCell(6);
cell.setCellValue(list1[0]);
cell.setCellStyle(style_bt);
}else if(i==7){
HSSFCell cell = row1.createCell(7);
cell.setCellValue(list1[1]);
cell.setCellStyle(style_bt);
}else{
HSSFCell cell = row1.createCell(i);
cell.setCellValue("");
cell.setCellStyle(style_bt);
}

}
int j = 4;// 定義一個循環開始行數

for (XXXX x : xxlist) {
HSSFRow datarow = sheet.createRow((int) j);
HSSFCell cell0 = datarow.createCell(0);
cell0.setCellValue((j-3));
cell0.setCellStyle(style_nr);
sheet.setColumnWidth(0, 2000);//設置單元格的寬度



j++;
}

如果你想在一個單元格實現自動換行怎麼做呢?

1:style.setWrapText(true);2:String dd = dfdd.replace(",","\\r\\n");


分享到:


相關文章: