struts2使用poi導出excel

如題,實現這個功能(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;

        }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章