ssh框架实现导出excel

前端采用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);
    }
	
发布了262 篇原创文章 · 获赞 201 · 访问量 14万+

猜你喜欢

转载自blog.csdn.net/hdy14/article/details/103126974