zoukankan      html  css  js  c++  java
  • Java下载execl表格

    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

  • 相关阅读:
    oracle 导入数据时提示只有 DBA 才能导入由其他 DBA 导出的文件
    oracle 常用语句
    android udp 无法收到数据 (模拟器中)
    android DatagramSocket send 发送数据出错
    AtCoder ABC 128E Roadwork
    AtCoder ABC 128D equeue
    AtCoder ABC 127F Absolute Minima
    AtCoder ABC 127E Cell Distance
    CodeForces 1166E The LCMs Must be Large
    CodeForces 1166D Cute Sequences
  • 原文地址:https://www.cnblogs.com/houqx/p/10117965.html
Copyright © 2011-2022 走看看