项目中,常常需要将数据以Excle导出,本文主要写的是导出Excle设置一些简单格式(左右对齐、加粗、居中)、合并相同值得单元格,求合计能操作。数据以List形式传入该方法。不要直接复制粘贴使用,只是一些常用的方法,根据个人需要使用。
1、读取模板文件,主要是Excle的头部信息等不变的信息
File file =new File(PathKit.getWebRootPath()+"/download/模板.xls");
InputStream is;
HSSFWorkbook wb=new HSSFWorkbook();
try {
//用流去关联文件
is = new BufferedInputStream(new FileInputStream(file));
//创建一个excle文件
wb = new HSSFWorkbook(is);
} catch (FileNotFoundException e1) {
e1.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
2、单元格样式设置(根据实际情况选用)
HSSFCellStyle LeftStyle = wb.createCellStyle();
LeftStyle.setVerticalAlignment(HSSFCellStyle.ALIGN_LEFT);// 左对齐
LeftStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);// 左右居中
LeftStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 上下居中
LeftStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN); //下边框
LeftStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);//左边框
LeftStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);//上边框
LeftStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);//右边框
LeftStyle.setLocked(true); //锁定单元格
LeftStyle.setWrapText(true); //自动换行
3、获取单元格,设置单元格内容(PoiUtil 工具类在下篇文章中)
wb.setSheetName(0,"专项"); //设置第1个工作薄的名称
HSSFSheet sheet = wb.getSheetAt(0); //获得第1个工作薄
HSSFRow row = sheet.getRow(1); //获得第2行
HSSFCell cell = row.getCell(1) ; //获得第2个单元
cell.setCellValue(new HSSFRichTextString(“XXX”); //设置单元格内容
HSSFSheet sheet = wb.createSheet("专项2");//创建一个新的工作薄
PoiUtil.copySheet(sheet,first,wb,wb,3); //复制第一页sheet前3行
HSSFRow row = sheet.createRow(4); //获得第5行
HSSFCell cell0 = row.createCell(0); //创建第一个单元格
HSSFCell cell1 = row.createCell(1); //创建第二个单元格
cell0.setCellStyle(LeftStyle); //给第一个单元格赋予样式,边框等等
cell1.setCellValue(new HSSFRichTextString(list.get(n).getStr("type_value"))); //单元格中设置值
cell1.setCellValue(0.0);//需要做加法运算的数字 直接写入就行,不需要用 new HSSFRichTextString()
cell2.setCellValue(new HSSFRichTextString(list.get(n).getStr("title")));
PoiUtil.addMergedRegion(sheet, 1, 4, sheet.getLastRowNum(),wb);//合并某一列值相同的单元格的
4、加入合计功能
HSSFSheet sheet = wb.getSheetAt(0);
int rowNum = sheet.getLastRowNum(); //获得最后一行
HSSFRow row = sheet.createRow(rowNum+1); //创建新的下一行
//合并单元格 参数是(起始行号,终止行号, 起始列号,终止列号)
sheet.addMergedRegion(new CellRangeAddress(rowNum+1,rowNum+1,0,1));
HSSFCell cell0 = row.createCell(0);
HSSFCell cell1 = row.createCell(1);
cell0.setCellStyle(centerStyle);
cell1.setCellStyle(verStyle);
cell0.setCellValue(new HSSFRichTextString("合计:"));
cell7.setCellFormula("SUM(H5:H"+(rowNum+1)+")"); //在单元格中设置公式 做累加
File fil =null;
try {
fil= new File(PathKit.getWebRootPath()+"/download/建设计划.xls");
wb.write(fil);
wb.close();
} catch (IOException e) {
e.printStackTrace();
}
return fil;
}
5、在一个Excle中,有多个sheet,打开Excle,选中显示sheet方法。
wb.setActiveSheet(2);
wb.setSelectedTab(2); //默认打开第3个sheet