小谈struts2导出excel表格的思路

本文介绍如何使用Struts2框架结合POI库实现从网页导出Excel文件的功能。通过示例代码展示了JSP页面、Struts2配置及Action层的具体实现。

如题,实现这个功能(excel2003和2007均适用),使用的第三方jar包是 poi ,主要是记录一下做过的东西,以便日后用。

 

一。jsp页面 :

<form id ="exportExcel" name="exportExcel" action="exportExcel.do" method="post">

                       <input type="hidden" id ="A" name="param1" >

                       <input type="hidden" id ="B" name="param2" >

                       <input type="hidden" id ="C" name="param3" >                

</form>

param1,2,3是参数,传到action。

 

二。struts2的xml配置 :

  <!-- 导出Excel -->

  <action name="exportExcel" method="exportExcel" class="testAction">

             <result name="success" type="stream">

                 <param name="contentType">application/vnd.ms-excel</param>

                 <param name="contentDisposition">attachment;filename="${fileName}"</param>

                 <param name="inputName">excelFile</param>

             </result>

      </action> 

 

 

三。 action端,需要两个方法,一个是exportExcel()和struts配置文件指明的stream流方法excelFile().

exportExcel()

public String exportWaitOrderExcel(){

               String name ="产品列表.xls";

               try {

                       name = java.net.URLEncoder.encode(name, "UTF-8");

                       fileName = new String(name.getBytes(), "iso-8859-1");

               } catch (UnsupportedEncodingException e) {

                       log4j.error("字符转码失败");

               }

               return SUCCESS;

        }


 

excelFile()

public InputStream getExcelFile()       //getExcelFile()一定要与excelFile对应,否则会出现异常

        {

               //第一步:接收参数,查询产品列表信息

               String param1= getRequest().getParameter("param1");

               String param2= getRequest().getParameter("param2");

               String param3= getRequest().getParameter("param3");

               List<ProductBean> productList = new ArrayList<ProductBean>();

 

               Map<Object, Object> map = new HashMap<Object, Object>();

 

               if (param1!= null && !param1.equals("")) {

                       map.put("param1", param1);

 

               }

 

               if (param2!= null && !param2.equals("")) {

                       map.put("param2", param2);

 

               }

                if (param3!= null && !param3.equals("")) {

                       map.put("param3", param3);

 

               }

 

               productList = productServicr.searchProductList(map);

 

               //第二步:构建excel表格,封装数据到excel                    

               HSSFWorkbook workbook = new HSSFWorkbook();

               HSSFSheet sheet = workbook.createSheet("sheet1");

 

               HSSFRow row = sheet.createRow(0);//创建第一行

              

               HSSFCell cell = row.createCell(0);//第一列

               cell.setCellValue("产品列表"); //行内容

              

               HSSFCellStyle style = workbook.createCellStyle(); //创建样式

               HSSFFont font = workbook.createFont(); //创建字体样式

                       font.setFontHeight((short)(20*20)); //字体

                       font.setBoldweight(HSSFFont.BOLDWEIGHT_NORMAL); //加粗

                       style.setAlignment(HSSFCellStyle.ALIGN_CENTER); //居中

               style.setFont(font); //设置字体样式  

               cell.setCellStyle(style); //设置样式

               sheet.addMergedRegion(new org.apache.poi.ss.util.Region(0,(short)0,0,(short)4)); //合并列

               //String menus = "产品名称,产品类型,产品描述";

              

               row = sheet.createRow(1);//创建第一行

               cell = row.createCell(0); //创建第一列

               cell.setCellValue(new HSSFRichTextString("产品名称"));

               cell = row.createCell(1);//创建第二列

               cell.setCellValue(new HSSFRichTextString("产品类型"));      

               cell = row.createCell(2);//

               cell.setCellValue(new HSSFRichTextString("产品描述"));

              

               for (int i = 0; i < productList.size(); i++) {

                       ProductBean product= list.get(i);

                       row=sheet.createRow(i+2);//创建第i+1行                      

                      

                       cell=row.createCell(0);//创建第一列

                       cell.setCellValue(product.getName());                

                       cell=row.createCell(1);//创建第二列

                       cell.setCellValue(product.getCategory()                     

                       cell=row.createCell(2);

                       cell.setCellValue(product.getDescription());                

               }

              

               //第三步:写入输出流

               ByteArrayOutputStream baos = new ByteArrayOutputStream();

 

               try {

                       workbook.write(baos);//写入

               } catch (IOException e) {

                       e.printStackTrace();

               }

 

               byte[] ba = baos.toByteArray(); 

               ByteArrayInputStream bais = new ByteArrayInputStream(ba); 

               return bais;

        }




 

 

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值