标签:
不管是xml的导入和导出还是Excel的导入和导出,对应的无非都是文件的解析和下载,下面来讲解的主要是导出(下载)1.给form定义一个id,通过jquery获取对应的form表单的数据2.通过jquery中的一个attr("属性",属性值)给action属性赋值,同理,即可以对method属性赋值3.通过jquery的一个submit()方法提交
$(function(){ $('#exportId').bind('click', function(){ $.messager.confirm('您正在操作导出poi','您确定继续执行该操作吗?',function(r){ if(r){ $("#userInfoId").attr("action","<%=request.getContextPath()%>/user/exportUser.action"); $("#userInfoId").submit(); }else{ $.messager.alert('提示','您取消了该操作!') } }) }); });
function poiExcel_() { $.messager.confirm("提示","确认要下载吗?",function(r){ if(r){ $.messager.alert('提示','下载成功!'); var v_productForm = document.getElementById("esayui_poi_list_id"); v_productForm.action = "<%=request.getContextPath()%>/esayui/poiExcel.jhtml"; v_productForm.submit(); }else { $.messager.alter('提示','下载失败!'); } }); }
@RequestMapping(value="/downloadXLS",method=RequestMethod.POST) public void downloadXLS(Product product,HttpServletRequest request,HttpServletResponse response) { //根据查询条件查询产品表集合 List<Product> productList=productService.findProductList(product); //根据查询条件查询品牌表集合 List<Brand> brandList=brandService.findBrandList(); //3.创建workbook HSSFWorkbook workBook =new HSSFWorkbook(); //下载 createExcelPoi(productList,brandList, workBook,request, response); }创建excel
private void createExcelPoi(List<Product> productList, List<Brand> brandList, HSSFWorkbook workBook,HttpServletRequest request,HttpServletResponse response) { for (int i=0;i<brandList.size();i++) { Brand brand = brandList.get(i); List<Product> eligibilityBrand = returnStudentList(productList,brand); if(eligibilityBrand.size()>0) { //根据workBook创建sheet HSSFSheet sheet = workBook.createSheet(brand.getBrandName()+"("+eligibilityBrand.size()+"个)"); createTitle(sheet, brand.getBrandName()); //标题头的样式设置 HSSFCellStyle style=buildStyleTitle(workBook, sheet); //标题头 HSSFCell titleCell = buildTitleLike(brandList,i,sheet); titleCell.setCellStyle(style); //根据行创建表头,并赋值 buildHeadRow(sheet,workBook); //根据行创建表头,并赋值 buildHeadRow(sheet,workBook); //表头创建后,在表头后创建获值值对应的行列及赋值 for (int j = 0; j < eligibilityBrand.size(); j++) { Integer id = eligibilityBrand.get(j).getId(); Long totalCount=productService.findBrandCountByProductId(id); buildMainbody(eligibilityBrand,totalCount,request, workBook, sheet, j); } } } //导出Excel SimpleDateFormat sim=new SimpleDateFormat("yyyyMMddhhmmss"); String strDate = sim.format(new Date()); //随机数 RandomStringUtils randomStringUtils=new RandomStringUtils(); //生成指定长度的字母和数字的随机组合字符串 String randomStr = randomStringUtils.randomAlphanumeric(5); String xlsName= strDate+randomStr+"产品信息表.xls" ; FileUtil.downloadXLSFile(request, response, workBook, xlsName); }
public static void downloadXLSFile(HttpServletRequest request, HttpServletResponse response, HSSFWorkbook workbook, String fileName) { OutputStream os = null; BufferedOutputStream bos = null; try { os = response.getOutputStream(); //重点突出(特别注意),通过response获取的输出流,作为服务端往客户端浏览器输出内容的一个通道 bos = new BufferedOutputStream(os); // 处理下载文件名的乱码问题(根据浏览器的不同进行处理) if (request.getHeader("User-Agent").toLowerCase().indexOf("firefox") > 0) { fileName = new String(fileName.getBytes("GB2312"),"ISO-8859-1"); } else { // 对文件名进行编码处理中文问题 fileName = java.net.URLEncoder.encode(fileName, "UTF-8");// 处理中文文件名的问题 fileName = new String(fileName.getBytes("UTF-8"), "GBK");// 处理中文文件名的问题 } response.reset(); // 重点突出 空白行的出现原因,jsp代码编译后产生。就是有jsp生成html文件的时候,html文件内部会出现很多空白行。下载后的文件内的空白行也是这样产生的。 //因此,需要 response.reset() 来清除首部的空白行 response.setCharacterEncoding("UTF-8"); // 重点突出 response.setContentType("application/x-msdownload");// 不同类型的文件对应不同的MIME类型 // 重点突出 // inline在浏览器中直接显示,不提示用户下载 // attachment弹出对话框,提示用户进行下载保存本地 // 默认为inline方式 response.setHeader("Content-Disposition", "attachment;filename="+ fileName); // response.setHeader("Content-Disposition", "attachment; filename="+fileName); // 重点突出 workbook.write(bos); } catch (Exception ex) { throw new RuntimeException(ex.getMessage()); } finally { // 特别重要 // 1. 进行关闭是为了释放资源 // 2. 进行关闭会自动执行flush方法清空缓冲区内容 try { if (null != bos) { bos.close(); bos = null; } if (null != os) { os.close(); os = null; } } catch (Exception ex) { throw new RuntimeException(ex.getMessage()); } } }对应的是创建excel中的循环获取对应的需求条件
public List<Product> returnStudentList(List<Product> productList, Brand brand) { //3.循环品牌集合,产品集合对比,当存在时就定义一个解释集合接收 List eligibilityList=new ArrayList(); for (Product product : productList) { int id = product.getBrand().getId(); System.out.println(id); int id2 = brand.getId(); if(id == id2) { eligibilityList.add(product); } } return eligibilityList; }对应的是创建excel中的创建表头,根据sheet创建row,根据row创建cell
private void createTitle(HSSFSheet sheet, String brandName) { HSSFRow row = sheet.createRow(1); HSSFRow row_9 = sheet.createRow(3); HSSFCell titalCell = row.createCell(5); titalCell.setCellValue(brandName+"列表信息"); }对应的是创建excel中的标题头的样式设置
private HSSFCellStyle buildStyleTitle(HSSFWorkbook workBook, HSSFSheet sheet) { //设置样式 HSSFCellStyle style = workBook.createCellStyle(); HSSFFont font = workBook.createFont(); font.setFontHeightInPoints((short) 28);//字号 font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);//加粗 font.setColor(HSSFColor.BLACK.index);//设置字体颜色 font.setFontName("黑体"); // 将“黑体”字体应用到当前单元格上 style.setFont(font); style.setAlignment(HSSFCellStyle.ALIGN_CENTER);//内容左右居中 style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);//内容上下居中 //背景信息 style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND); style.setFillForegroundColor(HSSFColor.SKY_BLUE.index); //合并单元格 sheet.addMergedRegion(new CellRangeAddress(1, 3, 5, 13)); //设置列宽(给时间的单元格的宽度给大点,防止时间显示格式错误!) sheet.setColumnWidth(5, 20*256); sheet.setColumnWidth(6, 20*256); sheet.setColumnWidth(7, 20*256); sheet.setColumnWidth(8, 20*256); sheet.setColumnWidth(9, 20*256); sheet.setColumnWidth(10, 20*256); sheet.setColumnWidth(11, 20*256); return style; }对应的是创建excel中的内容标题头的创建
private void buildHeadRow(HSSFSheet sheet,HSSFWorkbook workBook) { //根据sheet创建行 HSSFRow rowHead = sheet.createRow(4); //根据row创建cll HSSFCell idCell = rowHead.createCell(6); idCell.setCellValue("产品编号"); HSSFCell nameCell = rowHead.createCell(7); nameCell.setCellValue("产品名称"); HSSFCell priceCell = rowHead.createCell(8); priceCell.setCellValue("产品价格"); HSSFCell brandCell = rowHead.createCell(9); brandCell.setCellValue("品牌名"); HSSFCell imgCell = rowHead.createCell(10); imgCell.setCellValue("产品主图"); HSSFCell pictureNumCell = rowHead.createCell(11); pictureNumCell.setCellValue("产品子图个数"); HSSFCellStyle fontStyle = bulidFontStyleHead(workBook); idCell.setCellStyle(fontStyle); nameCell.setCellStyle(fontStyle); brandCell.setCellStyle(fontStyle); imgCell.setCellStyle(fontStyle); priceCell.setCellStyle(fontStyle); pictureNumCell.setCellStyle(fontStyle); }对应的是创建excel中的主体内容
private void buildMainbody(List<Product> productList,Long totalCount,HttpServletRequest request, HSSFWorkbook workBook, HSSFSheet sheet, int i) { //创建行,下标注意 HSSFRow contentRow = sheet.createRow(i+5); Product product = productList.get(i); //创建列 HSSFCell idCell = contentRow.createCell(6); idCell.setCellValue(product.getId()); HSSFCell nameCell = contentRow.createCell(7); nameCell.setCellValue(product.getProductName()); HSSFCell priceCell = contentRow.createCell(8); priceCell.setCellValue(product.getProductPrice()); if(product.getProductPrice()<50) { //年龄样式 buildPriceStyle(workBook, priceCell); }else if(product.getProductPrice()>100){ buildPriceMaxStyle(workBook, priceCell); } HSSFCell brandNameCell = contentRow.createCell(9); brandNameCell.setCellValue(product.getBrand().getBrandName()); HSSFCell imgCell = contentRow.createCell(10); buildImgUrl(workBook,request, sheet, i, product, imgCell); HSSFCell imgPrictureCell = contentRow.createCell(11); imgPrictureCell.setCellValue(totalCount); HSSFCellStyle fontStyle = bulidFontStyleHead(workBook); idCell.setCellStyle(fontStyle); nameCell.setCellStyle(fontStyle); brandNameCell.setCellStyle(fontStyle); imgPrictureCell.setCellStyle(fontStyle); imgCell.setCellStyle(fontStyle); }对应的是主体内容中的价格的样式
private void buildPriceStyle(HSSFWorkbook workBook, HSSFCell ageCell) { //设置样式 HSSFCellStyle style = workBook.createCellStyle(); HSSFFont font = workBook.createFont(); font.setFontHeightInPoints((short) 11);//字号 //font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);//加粗 font.setColor(HSSFColor.RED.index);//设置字体颜色 font.setFontName("宋体"); // 将“黑体”字体应用到当前单元格上 style.setFont(font); style.setAlignment(HSSFCellStyle.ALIGN_CENTER);//内容左右居中 style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);//内容上下居中 ageCell.setCellStyle(style); }对应的是主体内容中的最大价格的样式
private void buildPriceMaxStyle(HSSFWorkbook workBook, HSSFCell ageCell) { //设置样式 HSSFCellStyle style = workBook.createCellStyle(); HSSFFont font = workBook.createFont(); font.setFontHeightInPoints((short) 11);//字号 //font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);//加粗 font.setColor(HSSFColor.BLUE.index);//设置字体颜色 font.setFontName("宋体"); // 将“黑体”字体应用到当前单元格上 style.setFont(font); style.setAlignment(HSSFCellStyle.ALIGN_CENTER);//内容左右居中 style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);//内容上下居中 ageCell.setCellStyle(style); }对应的是标题的样式
private HSSFCellStyle bulidFontStyleHead(HSSFWorkbook workBook) { //设置样式 HSSFCellStyle style = workBook.createCellStyle(); HSSFFont font = workBook.createFont(); font.setFontHeightInPoints((short) 11);//字号 //font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);//加粗 //font.setColor(HSSFColor.RED.index);//设置字体颜色 font.setFontName("宋体"); // 将“黑体”字体应用到当前单元格上 style.setFont(font); style.setAlignment(HSSFCellStyle.ALIGN_CENTER);//内容左右居中 style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);//内容上下居中 return style; }对应的图片的设置
private void buildImgUrl(HSSFWorkbook workBook,HttpServletRequest request, HSSFSheet sheet, int i, Product product, HSSFCell imgUrlCell) { BufferedImage bufferImg = null; File file=new File(request.getSession().getServletContext().getRealPath(product.getProductUrl())); if(file!=null && file.length()>0){ ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream(); try { bufferImg = ImageIO.read(file); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } try { ImageIO.write(bufferImg, "jpg", byteArrayOut); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } //画图的顶级管理器,一个sheet只能获取一个(一定要注意这点) HSSFPatriarch patriarch = sheet.createDrawingPatriarch(); //anchor主要用于设置图片的属性 // HSSFClientAnchor anchor = new HSSFClientAnchor(dx1, dy1, dx2, dy2, col1, row1, col2, row2) HSSFClientAnchor anchor = new HSSFClientAnchor(11, i+11, 255, 255,(short) 10, 5+i, (short) 10, 5+i); anchor.setAnchorType(3); //插入图片 // HSSFPicture path = patriarch.createPicture(anchor, workbook.addPicture(byteArrayOut.toByteArray(), HSSFWorkbook.PICTURE_TYPE_JPEG)); /* fileOut = new FileOutputStream("D:/测试Excel.xls"); // 写入excel文件 wb.write(fileOut); */ imgUrlCell.equals( patriarch.createPicture(anchor, workBook.addPicture(byteArrayOut.toByteArray(), HSSFWorkbook.PICTURE_TYPE_JPEG))); } }
标签:
原文地址:http://blog.csdn.net/wu920604/article/details/51888288