前端采用jsp。
前端(按钮)
通过href链接到后端controller
<a class="easyui-linkbutton" icon="ui-icon-excel" plain="true"
href="personalFiles/export.do" target="selectedTodo" targetType="export" >导出</a>
后端
controller:
//将查出来的数据值和表头值传到工具类中的exportfile方法
@RequestMapping("export")
public String fileExport(String[] ids,HttpServletRequest request,HttpServletResponse response){
return ExcelUtils.exportFile(service.selcetPersonalFiles(ids), service.findWdTableCustomExport((short)1),
"文件列表导出.xls",
request,
response);
}
两个查询(查询要导出的数据,查询表头):
查询数据(根据id查询出勾选的要导出的数据)
public String updateSaveByUserId(String id){
String userid= ServletUtil.getMember().getId();
if(userid==null){
return MsgConfig.MSG_KEY_FAIL;
}else{
dao.update("update WdPersonalFiles set wdSave=1 where id=?",id);
return MsgConfig.MSG_KEY_SUCCESS;
}
}
查询表头(表头单独在一张表里)
public List<WdTableCustom> findWdTableCustomExport(short type){
return dao.find("from WdTableCustom t where t.tbType=? and t.isExport=1 order by t.fieldSort asc",type);
}
表头的数据表
工具类
/**
* 导出excel文件
* @param data 导出的数据
* @param tcs 自定义设置
* @param fileName 文件名称
* @param request
* @param response
* @return
*/
public static String exportFile(List data, List<WdTableCustom> tcs, String fileName, HttpServletRequest request,
HttpServletResponse response){
OutputStream os=null;
try{
// 创建新的Excel 工作簿
HSSFWorkbook workbook = new HSSFWorkbook();
HSSFSheet sheet = workbook.createSheet();
//第二行添加类型名称
HSSFRow secondRow = sheet.createRow(1);
for(int j=0;j<tcs.size();j++){
WdTableCustom tc=tcs.get(j);
HSSFCell cell = secondRow.createCell(j);
cell.setCellType(HSSFCell.CELL_TYPE_STRING);
if(StringUtils.isBlank(tc.getFieldAnotherTitle())){
cell.setCellValue(tc.getFieldTitle());
}else{
cell.setCellValue(tc.getFieldAnotherTitle());
}
}
//从第三行开始添加数据
for(int i=0;i<data.size();i++){
HSSFRow row = sheet.createRow(i+2);
for(int j=0;j<tcs.size();j++){
WdTableCustom tc=tcs.get(j);
HSSFCell cell = row.createCell(j);
cell.setCellType(HSSFCell.CELL_TYPE_STRING);
//根据属性名获取值
Object pro=PropertyUtils.getProperty(data.get(i), tc.getFieldName());
String value="";
if(pro!=null){
if(tc.getFieldType()==3){
//日期(YYYY-MM-DD)
value=DateUtil.date2String((Date)pro);
}else if(tc.getFieldType()==2){
if(pro==0){
value="否";
}else {
value="是";
}
} else if(tc.getFieldType()==4){
//日期时间(YYYY-MM-DD HH:MM:SS)
value=DateUtil.timestamp2String((Timestamp)pro);
}else if(tc.getFieldType()==5){
//用户id(转换用户姓名)
value=MyCache.getInstance().getTrueName((String)pro);
}
else if(tc.getFieldType()==6){
value=MyCache.getInstance().getDeptName((String)pro);
//部门id(转换部门名称)
}
else if(tc.getFieldType()==7){
//用户id(转换用户登录名)
value=MyCache.getInstance().getUserName((String)pro);
}else{
value=pro.toString();
}
}
cell.setCellValue(value);
}
}
//以下载的形式
response.setContentType("application/octet-stream");
// 根据不同浏览器 设置response的Header
String userAgent = request.getHeader("User-Agent").toLowerCase();
if(userAgent.indexOf("msie")!=-1){
//ie浏览器
response.addHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName,"UTF8"));
}else{
response.addHeader("Content-Disposition", "attachment;filename=" + new String(fileName.getBytes("UTF-8"),"ISO-8859-1"));
}
os=response.getOutputStream();
workbook.write(os);
os.flush();
return null;
}catch(Exception e) {
e.printStackTrace();
response.reset();
return "exception";//返回异常页面
}finally{
if(os!=null){
try {
os.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
/**
* 传入data 数据模型(导出文件列表)
* @param data
* @param tcs
* @param fileName
* @param request
* @param response
* @return
*/
public static String exportFile(DataGrid data,List<WdTableCustom> tcs,String fileName,HttpServletRequest request,
HttpServletResponse response){
return exportFile(data.getRows(), tcs, fileName, request, response);
}