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这样就省去了设置格式的过程
在模板文件中设置好表头的内容和格式 以及打印设置 页面设置

  • 设置表头在每页开头出现

这里写图片描述

之后的过程和之前一样省去了布局的大量时间 十分推荐使用 记得修改格式设置时不要单单修改本地模板,修改本地模板一定要记得重新上传模板

猜你喜欢

转载自blog.csdn.net/sinat_29774479/article/details/78881236
今日推荐