POI导出EXCEL的做法

chenhualeguan 2015-10-17

用POI导出Excel模板

导出的时候,应当分为三步:

第一步,建立一个导出Excel格式的工具类,方便在后面的控制器中直接调用生成Excel格式;

第二步,用spring+mybatis的框架创建service来创建所需要导出的文件的方法(),注意要分层次来写,从controller调用service接口的方法,而service的方法实现是在serviceimpl,并且serviceImpl类中SQL方法的实现是调用Mapper接口中方法。而Mapper接口方法的实现是在映射Mapper.xml定义;

第三步,在控制层将第二步查询的数据拼装到第一步的导出文件的格式中,在页面使用按钮绑定事件导出。

注意:

1.格式尽量完整,功能齐全,拼装数据时候注意:为空字符串时候,要判断,为空就赋值空;很重要,不然会报错!!!文件名在不同的浏览器的兼容的问题。表格下的命名。

2.在命名方法和控制器时候,要遵循驼峰规则和快速知道方法功能的习惯,所以,写上注释的代码是很有必要的。建议养成这个良好的习惯。

3.开发模块时候,要注意分步来实现功能的做法,这样是最有力自己完善和完成模块的。

4.知识点和不会的,要弄懂,尤其是联合查询几个数据库,分页和按时间排序等的。细节是尤其需要注意的。

下面是曾经做过的项目的模版:

导出格式类

packagecom.util;

importjava.text.SimpleDateFormat;

importjava.util.List;

importjavax.servlet.http.HttpServletRequest;

importorg.apache.poi.hssf.usermodel.HSSFCellStyle;

importorg.apache.poi.hssf.usermodel.HSSFFont;

importorg.apache.poi.hssf.util.HSSFColor;

importorg.apache.poi.ss.usermodel.Cell;

importorg.apache.poi.ss.usermodel.CellStyle;

importorg.apache.poi.ss.usermodel.Font;

importorg.apache.poi.ss.usermodel.IndexedColors;

importorg.apache.poi.ss.usermodel.Row;

importorg.apache.poi.ss.usermodel.Sheet;

importorg.apache.poi.ss.usermodel.Workbook;

importorg.apache.poi.xssf.streaming.SXSSFWorkbook;

importcom.ancun.bqbh.capture.model.BqbhProductConsume;

/**

*<p>

*ExcelExport类主要用于excel导出(POI)

*

*/

publicclassExcelExport{

publicstaticWorkbookexport(List<BqbhProductConsume>list){

//格式化日期

SimpleDateFormatsdf=newSimpleDateFormat("yyyy-MM-dd");

String[]excelHeader={"时间","概要","类型","文件大小/MB","花费数额","到期时间"};

//声明一个工作薄

//HSSFWorkbookwb=newHSSFWorkbook();

Workbookwb=newSXSSFWorkbook();

//生成一个表格这个是考虑50万条都可以导出的大数据表格

Sheetsheet=wb.createSheet("保全记录");

//设置表格默认列宽度

sheet.setDefaultColumnWidth(20);

//生成一个样式

CellStyleheadStyle=wb.createCellStyle();

CellStylebodyStyle=wb.createCellStyle();

//设置这些样式

headStyle.setFillForegroundColor(IndexedColors.YELLOW.index);//设置背景色

headStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);

bodyStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);

bodyStyle.setFillForegroundColor(IndexedColors.WHITE.index);

//设置边框

headStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN);//下边框

headStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);//左边框

headStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);//右边框

headStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);//上边框

headStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);//居中

headStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);

bodyStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN);//下边框

bodyStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);//左边框

bodyStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);//右边框

bodyStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);//上边框

bodyStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);//居中

bodyStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);

//设置字体

Fontfont=wb.createFont();

font.setColor(HSSFColor.BLACK.index);//字体颜色黑色

font.setFontHeightInPoints((short)12);//设置字体大小

font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);//粗体显示

FontbodyFont=wb.createFont();

bodyFont.setColor(HSSFColor.BLACK.index);//字体颜色黑色

bodyFont.setFontHeightInPoints((short)12);//设置字体大小

//把字体应用到当前的样式

//bodyStyle.setFont(bodyFont);

headStyle.setFont(font);

Rowrow=sheet.createRow((int)0);//设置第一行的表格名字

//获取填充表格的第一行的数据

for(inti=0;i<excelHeader.length;i++){

Cellcell=row.createCell(i);

cell.setCellValue(excelHeader[i]);

cell.setCellStyle(headStyle);//设置单元格格式

//sheet.autoSizeColumn(i);//自动确定宽度

}

//循环将数据集合list填入表格的行

Integertotal=0;

for(inti=0,j=list.size();i<j+1;i++){

//从第二行开始填充数据

row=sheet.createRow(i+1);

Cellcell0=row.createCell(0);

Cellcell1=row.createCell(1);

Cellcell2=row.createCell(2);

Cellcell3=row.createCell(3);

Cellcell4=row.createCell(4);

Cellcell5=row.createCell(5);

cell0.setCellStyle(bodyStyle);

cell1.setCellStyle(bodyStyle);

cell2.setCellStyle(bodyStyle);

cell3.setCellStyle(bodyStyle);

cell4.setCellStyle(bodyStyle);

cell5.setCellStyle(bodyStyle);

if(i==j){

row.setHeight((short)600);

cell0.setCellValue("总计");

cell4.setCellValue(total.intValue());

break;

}

BqbhProductConsumebqc=list.get(i);

total+=(null!=bqc.getSaveMount()?bqc.getSaveMount():0);

//建立时间

StringgetCreateDate=(null!=bqc.getGmtCreate()?sdf.format(bqc.getGmtCreate()):"");

//时间

StringgetSaveFinishTime=(null!=bqc.getSaveFinishTime()?sdf.format(bqc.getSaveFinishTime()):"");

cell0.setCellValue(getCreateDate);

cell1.setCellValue(bqc.getSaveDesc());

//cell2.setCellValue(bqc.getSaveType());

cell3.setCellValue(bqc.getSaveSizeString());

cell4.setCellValue(bqc.getSaveMount());

cell5.setCellValue(getSaveFinishTime);

//判断保存类型

if(bqc.getSaveType()==1){

cell2.setCellValue("网页");

}else{

cell2.setCellValue("作品");

}

}

returnwb;

}

/**

*

*@Title:processFileName

*

*@Description:ie,chrom,firfox下处理文件名显示乱码

*/

publicstaticStringprocessFileName(HttpServletRequestrequest,StringfileNames){

Stringcodedfilename=null;

try{

Stringagent=request.getHeader("USER-AGENT");

if(null!=agent&&-1!=agent.indexOf("MSIE")||null!=agent

&&-1!=agent.indexOf("Trident")){//IE浏览器

Stringname=java.net.URLEncoder.encode(fileNames,"UTF8");

codedfilename=name;

}elseif(null!=agent&&-1!=agent.indexOf("Mozilla")){//火狐、谷歌等

codedfilename=newString(fileNames.getBytes("UTF-8"),"iso-8859-1");

}

}catch(Exceptione){

e.printStackTrace();

}

returncodedfilename;

}

}

相关推荐

WindyQCF / 0评论 2016-09-30