Ext + jxl + struts 实现Excel导入导出(一)

前段时间,项目要求加一个Excel导入导出的功能,要求对导出的Excel文件编辑后,能够重新导入并保存,一开始用的是直接将response设置为返回excel格式,但在导入时提示出错。在网上查了一下,原来直接导出的excel文件还是网页模式的,而非真正的excel,需要将修改后的excel文件另存为一个excel文件后才能正常导入,这当然是一个非常不友好的缺陷。

   网上大牛真是多,有人说jxl控件是专门用来进行excel操作的,试验了一下,还真是好用,下面把我的应用用demo的形式记录一下,请大家批评指正。

   项目用的是ext3.3+SSH架构,目前应该比较大众化,ext3.3中的文件上传用的是扩展控件,在ext4.0中已经集成了文件上传控件,速度更新还真是快啊,让人不能蛋定。我的步骤是先设计界面,然后写代码,由于是后来增加的功能也不管什么设计流程了,用了最原始的作坊流程。

    一、将数据导出为Excel文件,前台界面如下图所示

(1) 在前台下拉框中,选择导出为Excel文件,此时ext触发导入的action,js代码如下

// 将策略另存为选择的类型

    function saveAsSelectedType(type) {

       window.location.href = basePath + '/task/frm!exportExcel.action?type='

              + type;

   }

(2)在action中获取要导出的数据,传给方法exportExcelAsSet,执行excel导出。参数分别为文件名、表格名、type(本文分msdoc和msexcel)。headers,headerNames, array是和数据相关的数组和字段名称、类型。

public void exportExcel()throws IOException,RowsExceededException, WriteException

    {

       String type = this.getRequest().getParameter("type");

              // 先从session中获取策略信息,如果没有则重新获取策略信息

       JSONObject json = (JSONObject) this.getRequest().getSession().getAttribute("localdispatch");     

        if(json == null){

            json = frmTaskService.localDispatch(this.getLocalNmsinfo());

        }    

       JSONArray array =(JSONArray) json.get("result");

       String fileName = "本地策略." + (type.equals("msexcel")?"xls":"doc");

       String tableCaption = "本地已启动任务相关策略";

        this.exportExcelAsSet(fileName,tableCaption, type, headers, headerNames, array);

   }

(3)在exportExcelAsSet中执行excel导出

public void exportExcelAsSet(StringfileName, String tableCaption,String type, String[]headers, String[]headeNames,JSONArray array) throws IOException, RowsExceededException, WriteException{

        //获取并设置response

       HttpServletResponseresponse = this.getResponse();      

   

       // 循环添加数据

       if(type.equals("msexcel")){

           // 输出流

           OutputStream outputStream = response.getOutputStream();

// 创建一个excel文件,并绑定到outputStream       

WritableWorkbook workbook = Workbook.createWorkbook(outputStream);

// 添加一个excel中的sheet        

WritableSheet sheet =workbook.createSheet("sheet1", 0);

           // 设置表头,第0列 0行

           sheet.addCell(new Label(0,0,tableCaption,setTitle(20)));

             // 合并表头单元格

           sheet.mergeCells(0,0, headers.length-1, 0);

           // 设置标题栏

           for(int i=0;i<headeNames.length;i++){

              sheet.addCell(new Label(i,1,headeNames[i],setTitle(13)));

              // 设置列的宽度

              if(i>0 && i<headeNames.length-1)

                  if(headeNames[i].equals("设备类型"))

                     sheet.setColumnView(i, 18);

                  else

                    sheet.setColumnView(i, 10);

              else {

                  sheet.setColumnView(i, 18);

              }

           }

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

              for(int j=0;j<headeNames.length;j++){

                  // 读取并添加数据

                  sheet.addCell(new Label(j,i+2,array.getJSONObject(i)

                         .getString(headers[j]),setTitle(10)));

              }

           }

      

           // 输出Excel

           workbook.write();

           workbook.close();

          

       }else{

         //……doc导出

         }

      

   }

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值