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");


分享到:


相關文章: