Java下载execl表格

it2022-05-05  169

Java用POI往execl表格中写数据,并下载下来有两种方式

1、用poil的API创建表格,并设计好表格格式,然后往里面写数据

1 /** 2 * execl导出 创建表格式,并写入数据 3 * @param sheetNmae sheet名 4 * @param tiltle 表头 5 * @param values 内容 6 * @param workbook 7 * @return 8 */ 9 public static HSSFWorkbook getHSSFWorkbook(String sheetNmae, 10 String []tiltle,String[][] values,HSSFWorkbook workbook){ 11 12 //创建一个Hssfworkbook 对应一个execl文件 13 if(workbook==null){ 14 workbook=new HSSFWorkbook(); 15 } 16 //在workbook中添加一个sheet,对应execl文件中的sheet 17 HSSFSheet sheet=workbook.createSheet(sheetNmae); 18 sheet.setDefaultColumnWidth((short)13); 19 //在sheet中添加表头第0行 20 HSSFRow row=sheet.createRow(0); 21 //创建单元格,设置表头 22 HSSFCellStyle style=(HSSFCellStyle)workbook.createCellStyle(); 23 style.setBorderTop(BorderStyle.THIN); 24 style.setBorderBottom(BorderStyle.THIN); 25 style.setBorderLeft(BorderStyle.THIN); 26 style.setBorderRight(BorderStyle.THIN); 27 //字体样式 28 HSSFFont font=workbook.createFont(); 29 font.setFontName("微软雅黑"); 30 style.setFont(font); 31 32 //声明列对象 33 HSSFCell cell=null; 34 35 //创建标题 36 for(int i=0;i<tiltle.length;i++){ 37 cell=row.createCell(i); 38 cell.setCellValue(tiltle[i]); 39 cell.setCellStyle(style); 40 } 41 //创建内容 42 //声明列对象 43 HSSFCell cell2=null; 44 for(int i=0;i<values.length;i++){ 45 row = sheet.createRow(i + 1); 46 for(int j=0;j<values[i].length;j++){ 47 //将内容按顺序赋给对应的列对象 48 cell2=row.createCell(j); 49 cell2.setCellValue(values[i][j]); 50 cell2.setCellStyle(style); 51 } 52 } 53 54 return workbook; 55 } 56 1 /** 2 * 3 * @param response 4 * @param companyCostVo 前端传过来的对象 5 * @throws Exception 6 */ 7 @RequestMapping("/download") 8 public void download(HttpServletResponse response, CompanyCostVo companyCostVo) throws Exception { 9 10 Integer year=Integer.valueOf(redisService.valueOperations().get("audityear").toString()); 11 companyCostVo.setYear(year); 12 //获取数据 13 List<CompanyCostVo> companyCostVos=companyCostService.selectCompanyCost(companyCostVo); 14 //exexl标题 15 String[]title={"序号","公司名称","公交总车辆数","公交收费车辆数","公交收费单价","公交实收金额","公交应收金额", 16 "农客总车辆数","农客收费车辆数","农客收费单价","农客实收金额","农客应收金额","总实收金额","总应收金额"}; 17 //execl文件名 18 String fileName=year+"年企业审计费用清算信息表.xls"; 19 //sheetming 20 String sheetName="费用清算信息"; 21 int len=companyCostVos.size(); 22 String [][] content=new String[len][14]; 23 for(int i=0;i<len;i++){ 24 //content[i]=new String[len]; 25 CompanyCostVo cCostVo=companyCostVos.get(i); 26 content[i][0]=(i+1)+""; 27 content[i][1]=cCostVo.getCompanyName(); 28 content[i][2]="无"; 29 if(cCostVo.getVehicleNumGj()!=null){ 30 content[i][2]=cCostVo.getVehicleNumGj().toString(); 31 } 32 content[i][3]="无"; 33 if(cCostVo.getVehicleNumChargGj()!=null){ 34 content[i][3]=cCostVo.getVehicleNumChargGj().toString(); 35 } 36 content[i][4]="无"; 37 if(cCostVo.getUnitPriceGj()!=null){ 38 content[i][4]=cCostVo.getUnitPriceGj().toString(); 39 } 40 content[i][5]="无"; 41 if(cCostVo.getAccountAmountGj()!=null){ 42 content[i][5]=cCostVo.getAccountAmountGj().toString(); 43 } 44 content[i][6]="无"; 45 if(cCostVo.getAccountPayableGj()!=null){ 46 content[i][6]=cCostVo.getAccountPayableGj().toString(); 47 } 48 content[i][7]="无"; 49 if(cCostVo.getVehicleNumNk()!=null){ 50 content[i][7]=cCostVo.getVehicleNumNk().toString(); 51 } 52 content[i][8]="无"; 53 if(cCostVo.getVehicleNumChargNk()!=null){ 54 content[i][8]=cCostVo.getVehicleNumChargNk().toString(); 55 } 56 content[i][9]="无"; 57 if(cCostVo.getUnitPriceNk()!=null){ 58 content[i][9]=cCostVo.getUnitPriceNk().toString(); 59 } 60 content[i][10]="无"; 61 if(cCostVo.getAccountAmountNk()!=null){ 62 content[i][10]=cCostVo.getAccountAmountNk().toString(); 63 } 64 content[i][11]="无"; 65 if(cCostVo.getAccountPayableNk()!=null){ 66 content[i][11]=cCostVo.getAccountPayableNk().toString(); 67 } 68 content[i][12]="无"; 69 if(cCostVo.getAccountAmount()!=null){ 70 content[i][12]=cCostVo.getAccountAmount().toString(); 71 } 72 content[i][13]="无"; 73 if(cCostVo.getAccountPayable()!=null){ 74 content[i][13]=cCostVo.getAccountPayable().toString(); 75 } 76 77 } 78 79 //创建hssfworkbook 80 HSSFWorkbook workbook=ExcelUtils.getHSSFWorkbook(sheetName, title, content, null); 81 //相应到客户端 82 try{ 83 this.setResponseHeader(response, fileName); 84 OutputStream osStream=response.getOutputStream(); 85 workbook.write(osStream); 86 osStream.flush(); 87 osStream.close(); 88 }catch(Exception e){ 89 e.printStackTrace(); 90 } 91 } 1 //发送响应流方法 2 public void setResponseHeader(HttpServletResponse response, String fileName) { 3 try { 4 try { 5 fileName = new String(fileName.getBytes(),"UTF-8"); 6 } catch (UnsupportedEncodingException e) { 7 e.printStackTrace(); 8 } 9 response.setContentType("application/octet-stream;charset=UTF-8"); 10 response.setHeader("Content-Disposition", "attachment;filename="+ fileName); 11 response.addHeader("Pargam", "no-cache"); 12 response.addHeader("Cache-Control", "no-cache"); 13 } catch (Exception ex) { 14 ex.printStackTrace(); 15 } 16 }

2、自己创建好Execl表的模板,然后直接往里面写入数据

1 /** 2 * 导出异常车辆Ecexl 3 * @param response 4 * @param materialGjChangeDetailVo 5 * @throws Exception 6 */ 7 @RequestMapping("/downloadEcexl") 8 @ResponseBody 9 public void downloadExecl(HttpServletResponse response, MaterialGjChangeDetailVo materialGjChangeDetailVo) throws Exception{ 10 // 所属公司 11 SysUser sysUser = (SysUser) SecurityUtils.getSubject().getPrincipal(); 12 if(!"1".equals(sysUser.getType())) { 13 materialGjChangeDetailVo.setCompanyId(sysUser.getCompanyInfoId()); 14 materialGjChangeDetailVo.setYear(Integer.valueOf(redisService.valueOperations().get("audityear").toString())); 15 } 16 //模板地址,项目的根目录 17 String filePathName = "/templates/新增及更换公交车异常车辆明细表.xls"; 18 InputStream in=this.getClass().getResourceAsStream(filePathName); 19 POIFSFileSystem poifsFileSystem=new POIFSFileSystem(in); 20 HSSFWorkbook workbook=new HSSFWorkbook(poifsFileSystem); 21 HSSFSheet sheet=workbook.getSheet("Sheet1"); 22 sheet.setForceFormulaRecalculation(true); 23 //设置模板中的一些格式,这里主要是处理某些表格高亮 24 HSSFCellStyle style=(HSSFCellStyle)workbook.createCellStyle(); 25 style = workbook.createCellStyle(); 26 style.setFillForegroundColor(IndexedColors.YELLOW.getIndex()); 27 style.setFillPattern(FillPatternType.SOLID_FOREGROUND); 28 29 List<MaterialGjChangeDetailVo> ts = materialGjChangeDetailService.selectMaterialGjChangeDetail(materialGjChangeDetailVo); 30 String companyName=null; 31 if(ts!=null&& ts.size()!=0){ 32 companyName=ts.get(0).getCompanyName(); 33 //从第一行第一列开始写入数据,列与行的下标都是从0开始的 34 sheet.getRow(0).getCell(0).setCellValue("新增及更换公交车明细表("+materialGjChangeDetailVo.getYear()+"年度)"); 35 sheet.getRow(2).getCell(0).setCellValue("被审计单位:"+companyName); 36 for(int i=0,len1=ts.size();i<len1;i++){ 37 String falg=null; 38 if(ts.get(i).getFlag()!=null){ 39 falg=ts.get(i).getFlag(); 40 } 41 for(int j=0,len=falg.length();j<len;j++){ 42 sheet.getRow(5+i).getCell(0).setCellValue(i+1);//第5+i行 第i列 从0开始 0 43 if(ts.get(i).getPlateNumber()!=null){ 44 sheet.getRow(5+i).getCell(1).setCellValue(ts.get(i).getPlateNumber());//1 45 if(falg!=null&&falg!=null&&falg.charAt(1)=='0'){ 46 sheet.getRow(5+i).getCell(1).setCellStyle(style); 47 } 48 } 49 if(ts.get(i).getPlateColor()!=null){ 50 if (ts.get(i).getPlateColor().equals("100201")) { 51 sheet.getRow(5+i).getCell(2).setCellValue("黄色");//2 52 } else if (ts.get(i).getPlateColor().equals("100202")) { 53 sheet.getRow(5+i).getCell(2).setCellValue("蓝色");//2 54 } else if (ts.get(i).getPlateColor().equals("100203")) { 55 sheet.getRow(5+i).getCell(2).setCellValue("其他");//2 56 } 57 58 if(falg!=null&&falg.charAt(2)=='0'){ 59 sheet.getRow(5+i).getCell(2).setCellStyle(style); 60 } 61 } 62 if(ts.get(i).getVehicleBrandRegDate()!=null){ 63 sheet.getRow(5+i).getCell(3).setCellValue(ts.get(i).getVehicleBrandRegDate());//3 64 if(falg!=null&&falg.charAt(3)=='0'){ 65 sheet.getRow(5+i).getCell(3).setCellStyle(style); 66 } 67 } 68 if(ts.get(i).getVehicleModel()!=null){ 69 sheet.getRow(5+i).getCell(4).setCellValue(ts.get(i).getVehicleModel());//4 70 if(falg!=null&&falg.charAt(4)=='0'){ 71 sheet.getRow(5+i).getCell(4).setCellStyle(style); 72 } 73 } 74 if(ts.get(i).getManufacturers()!=null){ 75 sheet.getRow(5+i).getCell(5).setCellValue(ts.get(i).getManufacturers());//5 76 if(falg!=null&&falg.charAt(5)=='0'){ 77 sheet.getRow(5+i).getCell(5).setCellStyle(style); 78 } 79 } 80 if(ts.get(i).getBrand()!=null){ 81 82 sheet.getRow(5+i).getCell(6).setCellValue(ts.get(i).getBrand());//6 83 if(falg!=null&&falg.charAt(6)=='0'){ 84 sheet.getRow(5+i).getCell(6).setCellStyle(style); 85 } 86 } 87 if(ts.get(i).getVehicleLength()!=null){ 88 89 sheet.getRow(5+i).getCell(7).setCellValue(ts.get(i).getVehicleLength());//7 90 if(falg!=null&&falg.charAt(7)=='0'){ 91 sheet.getRow(5+i).getCell(7).setCellStyle(style); 92 } 93 } 94 if(ts.get(i).getVehicleType()!=null){ 95 if (ts.get(i).getVehicleType().contains("100701")) { 96 sheet.getRow(5+i).getCell(8).setCellValue("纯电动");//8 97 } else if (ts.get(i).getVehicleType().contains("100702")) { 98 sheet.getRow(5+i).getCell(8).setCellValue("燃料电池");//8 99 } else if (ts.get(i).getVehicleType().contains("100703")) { 100 sheet.getRow(5+i).getCell(8).setCellValue("超级电容");//8 101 } else if (ts.get(i).getVehicleType().contains("100704")) { 102 sheet.getRow(5+i).getCell(8).setCellValue("插电式");//8 103 } else if (ts.get(i).getVehicleType().contains("100705")) { 104 sheet.getRow(5+i).getCell(8).setCellValue("非插电式");//8 105 } else if (ts.get(i).getVehicleType().contains("100706")) { 106 sheet.getRow(5+i).getCell(8).setCellValue("其他");//8 107 } 108 if(falg!=null&&falg.charAt(8)=='0'){ 109 sheet.getRow(5+i).getCell(8).setCellStyle(style); 110 } 111 } 112 113 114 if(ts.get(i).getExtendInfo()!=null){ 115 if (ts.get(i).getExtendInfo()) { 116 sheet.getRow(5+i).getCell(9).setCellValue("是");//9 117 } else{ 118 sheet.getRow(5+i).getCell(9).setCellValue("否");//9 119 } 120 if(falg!=null&&falg.charAt(9)=='0'){ 121 sheet.getRow(5+i).getCell(9).setCellStyle(style); 122 } 123 } 124 if(ts.get(i).getPurchaseInvoiceInfo()!=null){ 125 if (ts.get(i).getPurchaseInvoiceInfo()) { 126 sheet.getRow(5+i).getCell(10).setCellValue("是");//10 127 } else{ 128 sheet.getRow(5+i).getCell(10).setCellValue("否");//10 129 } 130 131 if(falg!=null&&falg.charAt(10)=='0'){ 132 sheet.getRow(5+i).getCell(10).setCellStyle(style); 133 } 134 } 135 break; 136 } 137 } 138 } 139 try{ 140 this.setResponseHeader(response, companyName+"-新增及更换公交车异常车辆明细表.xls"); 141 OutputStream osStream=response.getOutputStream(); 142 workbook.write(osStream); 143 osStream.flush(); 144 osStream.close(); 145 }catch(Exception e){ 146 e.printStackTrace(); 147 } 148 } 1 /** 2 * 3 * @param response 4 * @param fileName 文件名 5 */ 6 public void setResponseHeader(HttpServletResponse response, String fileName) { 7 try { 8 try { 9 fileName = new String(fileName.getBytes(),"ISO8859-1"); 10 } catch (UnsupportedEncodingException e) { 11 e.printStackTrace(); 12 } 13 response.setContentType("application/octet-stream;charset=ISO8859-1"); 14 response.setHeader("Content-Disposition", "attachment;filename="+ fileName); 15 response.addHeader("Pargam", "no-cache"); 16 response.addHeader("Cache-Control", "no-cache"); 17 } catch (Exception ex) { 18 ex.printStackTrace(); 19 } 20 }

以上就是使用poi往execl表中写入数据的两种方式,需要注意的是,前端过来的请求不能是ajax请求,因为ajax无法解析二进制流的输出。具体原因客参考:https://www.cnblogs.com/houqx/p/10106562.html

转载于:https://www.cnblogs.com/houqx/p/10117965.html


最新回复(0)