struts2结合poi导出excel

【转】struts2结合poi导出excel(二)

先看效果图:

第一步:

第二步:点击导出内容到excel



第三步:点击上图的“选择”按钮



最后可以选择打开或者保存了。

实现方式如下:

页面设计:

<td width="100" align="center"><a href="#" οnclick="doExport();return false;" class="blue bold">导出内容到excel</a></td>

function doExport(){

        var dataV=window.showModalDialog("<c:out value='${ctx}'/>/task/dialog.jsp","","dialogWidth=250px;dialogHeight=220px");
    if(dataV !=null && dataV != ""){
        if(dataV == '1'){
            var eleForm = $("pageQueryForm");
         var lastAction = eleForm.action;
         var ExportAll = $("ExportAll");
         if(ExportAll != null){
            eleForm.removeChild(ExportAll);
         }
         eleForm.action = "doExportExcel.action";
         eleForm.submit();
         eleForm.action = lastAction;
         return;
        }else if(dataV == '2'){
            var eleForm = $("pageQueryForm");
         var lastAction = eleForm.action;
         var eleHiddenExportExcel = new Element("input",{type:"hidden",name:"ExportAll"});
         eleHiddenExportExcel.wrap(eleForm);
         eleForm.action = "doExportExcel.action";
         eleForm.submit();
         eleForm.action = lastAction;
         return;
        }
}
}

Action:

两个属性:

String fileNames;
InputStream excelStream;

提供get和set方法

public String doExport() throws TaException{

         String result = "";
  
         User user = (User) this.getSession().get("user");

         if(user != null){

                 String ExportAll = this.getHttpServletRequest().getParameter("ExportAll");

                  List dataList = new ArrayList();
                  if(ExportAll == null){
                          log.debug("导出当前页面内容到excel");
                          this.projectService.queryPageProject(user, pageQueryForm,customDisplayWhere,orderQueryString,orgList);
                         dataList = pageQueryForm.getPageRecordList();
                }else{
                           log.debug("导出所有容到excel");
                          dataList = this.projectService.queryAllProject(user,pageQueryForm,customDisplayWhere,orderQueryString,orgList);
                 }

                 HSSFWorkbook workbook = printExcel(tmpContent,tmpContentCn,dataList);
            
                if(workbook != null){
                       try{
                               Calendar c = Calendar.getInstance();
                              int year = c.get(Calendar.YEAR);
                               int month = c.get(Calendar.MONTH)+1;
                               String month_ = new String(""+month);
                               if(month<10){
                                     month_ = "0"+month;
                               }
                               int day = c.get(Calendar.DAY_OF_MONTH);
                               String day_ = new String(""+day);
                              if(day<10){
                                     day_ = "0"+day;
                                }
                                this.exportExcel(workbook,year+month_+""+day_+"sxta.xls");
                               result = "outExcel";
                         }catch(IOException e){
                               e.printStackTrace();
                               message = "出错了!";
                               redirectTo = this.getHttpServletRequest().getContextPath()+"/task/listProject.action";
                               return SUCCESS;
                         }
                }

        }else{

                 log.debug("user is null");
                message = "出错了!";
                 redirectTo = this.getHttpServletRequest().getContextPath()+"/task/listProject.action";
                 return SUCCESS;

        }

        return result;

}

private HSSFWorkbook printExcel(String tmpContent,String tmpContentCn,List dataList){
  
          HSSFWorkbook workbook = null;
          String[] titles_CN = tmpContentCn.split(",");
          String[] titles_EN = tmpContent.split(",");
          try{
               //创建工作簿实例 
                workbook = new HSSFWorkbook();
               //创建工作表实例 
              HSSFSheet sheet = workbook.createSheet("sxtaExcel"); 
               //设置列宽 
               this.setSheetColumnWidth(titles_CN,sheet);
             //获取样式 
               HSSFCellStyle style = this.createTitleStyle(workbook); 
               if(dataList != null){
                    //创建第一行标题 
                     HSSFRow row = sheet.createRow((short)0);// 建立新行
                     for(int i=0;i<titles_CN.length;i++){
                     this.createCell(row, i, null, HSSFCell.CELL_TYPE_STRING, 
                            this.getText(titles_CN[i]));
                     }
                     //给excel填充数据 
                    for(int i=0;i<dataList.size();i++){ 
                             // 将dataList里面的数据取出来 
                             Project project= (Project)dataList.get(i);
                              HSSFRow row1 = sheet.createRow((short) (i + 1));// 建立新行
                    
                             boolean isOverTime = false;
                              for(int j=0;j<titles_EN.length;j++){
                                       String tmpstr = "";
                                       if (titles_EN[j].equals("name")){
                                             this.createCell(row1, j, style, HSSFCell.CELL_TYPE_STRING, 
                               project.getName());
                                       }     

                                      ……              

                           }
                   
                   }
            }else{
                     this.createCell(sheet.createRow(0), 0, style,HSSFCell.CELL_TYPE_STRING, "查无资料");
            }
       }catch(Exception e){
                   e.printStackTrace();
       }
      return workbook;
}

//设置列宽
private void setSheetColumnWidth(String[] titles_CN,HSSFSheet sheet){ 
        // 根据你数据里面的记录有多少列,就设置多少列
       for(int i=0;i<titles_CN.length;i++){
               sheet.setColumnWidth((short)i, (short) 3000);
       }

}

//设置excel的title样式  
private HSSFCellStyle createTitleStyle(HSSFWorkbook wb) { 
       HSSFFont boldFont = wb.createFont(); 
       boldFont.setFontHeight((short) 200); 
       HSSFCellStyle style = wb.createCellStyle(); 
       style.setFont(boldFont); 
       style.setDataFormat(HSSFDataFormat.getBuiltinFormat("###,##0.00")); 
       //style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
       //style.setFillBackgroundColor(HSSFColor.LIGHT_ORANGE.index);
       return style;  
}
    
    
//创建Excel单元格  
private void createCell(HSSFRow row, int column, HSSFCellStyle style,int cellType,Object value) { 
       HSSFCell cell = row.createCell((short) column); 
       cell.setEncoding(HSSFCell.ENCODING_UTF_16); 
       if (style != null) { 
            cell.setCellStyle(style); 
       }   
       switch(cellType){ 
            case HSSFCell.CELL_TYPE_BLANK: {} break; 
            case HSSFCell.CELL_TYPE_STRING: {cell.setCellValue(value.toString()+"");} break; 
            case HSSFCell.CELL_TYPE_NUMERIC: {
            cell.setCellType(HSSFCell.CELL_TYPE_NUMERIC); 
                cell.setCellValue(Double.parseDouble(value.toString()));}break; 
            default: break; 
      }  

}

//写入输入流中

private void exportExcel(HSSFWorkbook workbook,String fileName) throws IOException{
        fileNames = fileName;
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        workbook.write(baos); 
        baos.flush(); 
        byte[] aa = baos.toByteArray();
        excelStream = new ByteArrayInputStream(aa, 0, aa.length);
        baos.close();
}

接下来,struts.xml中的配置:

<result name="outExcel" type="stream">
                     <param name="contentType">application/vnd.ms-excel</param>   <!-- 注意这里的ContentType -->
                     <param name="inputName">excelStream</param>
                     <param name="contentDisposition">attachment;filename="${fileNames}"</param>
                     <param name="bufferSize">1024</param>
</result>


三个jar包:

OK

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值