本文共 4791 字,大约阅读时间需要 15 分钟。
总结一下,导出excel
---------------------------------
一、jsp页面指向路径,要在页面获取到要传入后台的参数 <div style="margin-top:15px;margin-left:20px;" mce_style="margin-top:15px;margin-left:20px;"> <input type="button" value="导出" onClick="javascript:document.location='<%=ctxPath%>/admin.do?cmd=exportDt&dt=<%=Constant.DT_TYPE[3][0] %>&customerId=${customerId }'" class="greenShortBtn" onMouseOver="this.className='yellowShortBtn'" onMouseOut="this.className='greenShortBtn'"/> </div>
二、在adminAction.java中实现方法
//从前台抛的路径指向这个方法private String exportDt(HttpServletRequest request, HttpServletResponse response) throws Exception{ //从前台传过来的,要导出哪张表 String dt = request.getParameter("dt"); //设置客户ID Map map = new HashMap(); String customer_id = request.getParameter("customerId"); if (customer_id != null) { map.put("customer_id", customer_id); } //生成一个list,用于存储查出的字典表数据 List<Map> dataList = null; //得到ExportDataVO,ExportDataVO是存放导出字段名的一个实体java文件 ExportDtVO exportDt = new ExportDtVO(); //导出文件名 String fileName = null; //Constant是存放常量的一个实体,我们把表名用数组写在一起,DT_TYPE[0][0]对应一个表 if (Constant.DT_TYPE[0][0].equals(dt)){//如果前台传过来的要到处的表名等于DT_TYPE[0][0],就去查这个表并导 dataList = leadsService.findLeadsTypeExportList();//查表数据 exportDt.setLeadsTypeList(null == dataList ? null : dataList); fileName = Constant.DT_TYPE[0][1];//获得表的名字 } //得到导出文件的全名,并加文件导出格式 fileName = fileName + "_" + (new SimpleDateFormat("yyyy-MM-dd_HHmmss").format(new Date())) + ".xls"; //导出表之前的一些必要设置(没深究这里) OutputStream out = response.getOutputStream(); response.setContentType("application/msexcel"); response.addHeader("Content-Disposition", "attachment;filename=" + new String(fileName.getBytes("gb2312"), "ISO8859-1")); doExport(request, response, exportDt, dt, out);//这个方法才是真正的去做导出的工作 return ""; }
/** * 导出 * @param request * @param response * @param exportDt * @return * @throws Exception */ private void doExport(HttpServletRequest request, HttpServletResponse response, ExportDtVO exportDt, String dt, OutputStream out) throws Exception { try{ //创建一个空白的WorkBook HSSFWorkbook wb = new HSSFWorkbook(); //创建页笺 HSSFSheet sheet = null; if (Constant.DT_TYPE[0][0].equals(dt)) {//忘了说,这个适合多页签导出 sheet = wb.createSheet(Constant.DT_TYPE[0][1]); //向页笺中写内容 writeSheet(dt, sheet, exportDt.getLeadsTypeList(), exportDt.getLeadsTypeFieldType(), exportDt.getLeadsTypeFieldName(), exportDt.getLeadsTypeFieldMean()); } else if (Constant.DT_TYPE[1][0].equals(dt)) { sheet = wb.createSheet(Constant.DT_TYPE[1][1]); writeSheet(dt, sheet, exportDt.getIbTypeList(), exportDt.getIbTypeFieldType(), exportDt.getIbTypeFieldName(), exportDt.getIbTypeFieldMean()); } //把WorkBook写到流里 wb.write(out); out.close(); } catch (Exception e) { logger.error("导出excel出错!", e); throw e; } } /** * 生成 * @param sheetName * @param sheet * @param dataList * @param fieldType * @param fieldName * @param fieldMean */ @SuppressWarnings("unchecked") private void writeSheet(String sheetName, HSSFSheet sheet, List<Map> dataList, Integer[] fieldType, String[] fieldName, String[] fieldMean) { int rowNum = 0; HSSFRow row = sheet.createRow(rowNum++); HSSFCell cell = null; //插入表头(sheet第一行),即要导出数据的字段名称 for (int i = 0; i < fieldName.length; i++) { cell = row.createCell((short)i); cell.setCellValue(new HSSFRichTextString(fieldMean[i])); } //从第二行开始循环插入数据 if(dataList != null){ for(Map data : dataList){ row = sheet.createRow(rowNum++); for (int i = 0; i < fieldName.length; i++) { cell = row.createCell((short) i); if(Types.BIGINT == fieldType[i]){//长整形 if(data.get(fieldName[i]) != null){ cell.setCellValue(Long.parseLong(String.valueOf(data.get(fieldName[i])))); }else { cell.setCellValue(new HSSFRichTextString("")); } }else if(Types.INTEGER == fieldType[i]){//整数 if(data.get(fieldName[i]) != null){ cell.setCellValue(Integer.parseInt(String.valueOf(data.get(fieldName[i])))); }else { cell.setCellValue(new HSSFRichTextString("")); } }else if(Types.BIT == fieldType[i]){//bit if(data.get(fieldName[i]) != null){ cell.setCellValue((Boolean)data.get(fieldName[i]) ? 1 : 0); }else { cell.setCellValue(0); } }else if(Types.DECIMAL == fieldType[i]){//小数 if(data.get(fieldName[i]) != null){ cell.setCellValue(Double.parseDouble(String.valueOf(data.get(fieldName[i])))); }else { cell.setCellValue(new HSSFRichTextString("")); } }else{//字符串 if(data.get(fieldName[i]) != null){ cell.setCellValue(new HSSFRichTextString(String.valueOf(data.get(fieldName[i])))); }else { cell.setCellValue(new HSSFRichTextString("")); } } } } } }
转载地址:http://ehdpi.baihongyu.com/