现在的位置: 首页 > 综合 > 正文

JAVA JXL —–excel文件生成、在线打开和下载

2013年06月22日 ⁄ 综合 ⁄ 共 2414字 ⁄ 字号 评论关闭

前一篇是利用JXL 进行excel文档上传 和 数据解析,这里介绍利用JXL生成excel文档、并同时文件在线打开和下载

一、范例 生成一个10行5列的excel文档

 WritableWorkbook wwb = null;    
        try {   
            //首先要使用Workbook类的工厂方法创建一个可写入的工作薄(Workbook)对象   
            wwb = Workbook.createWorkbook(new File(fileName));   
        } catch (IOException e) {   
            e.printStackTrace();   
        }   
        if(wwb!=null){   
            //创建一个可写入的工作表   
            //Workbook的createSheet方法有两个参数,第一个是工作表的名称,第二个是工作表在工作薄中的位置   
            WritableSheet ws = wwb.createSheet("sheet1", 0);   
               
            //下面开始添加单元格   
            for(int i=0;i<10;i++){   
                for(int j=0;j<5;j++){   
                    //这里需要注意的是,在Excel中,第一个参数表示列,第二个表示行   
                    Label labelC = new Label(j, i, "这是第"+(i+1)+"行,第"+(j+1)+"列");   
                    try {   
                        //将生成的单元格添加到工作表中   
                        ws.addCell(labelC);   
                    } catch (RowsExceededException e) {   
                        e.printStackTrace();   
                    } catch (WriteException e) {   
                        e.printStackTrace();   
                    }   
                }   
            }   
            try {   
                //从内存中写入文件中   
                wwb.write();   
                //关闭资源,释放内存   
                wwb.close();   
            } catch (IOException e) {   
                e.printStackTrace();   
            } catch (WriteException e) {   
                e.printStackTrace();   
            }   
        }

二、文件下载 

简单起见,下载本地D盘已经生成好的文件,这里需要注意个地方,就是文件名乱码问题,在这里用红色字体标出

String filePath = "D:\\测试Excel.xls";
     writeExcel(filePath);
  File file = new File(filePath);
  if(!file.exists()){
    response.sendError(404,"File Not found");
    return;
  }
  BufferedInputStream br = new BufferedInputStream(new FileInputStream(filePath));
     byte[] buf = new byte[1024];
     int len = 0;
     response.reset(); // 非常重要
     String fileName = file.getName();
     byte[]   b = fileName.getBytes( "GBK");
     fileName = new   String(b, "iso8859-1"); 
   if(online){//在线打开
            URL u = new URL("
file:///" + filePath);
            response.setContentType(u.openConnection().getContentType());
            response.setHeader("Content-Disposition", "inline; filename=" + fileName);
  }else{
            response.setContentType("application/x-msdownload");
            response.setHeader("Content-Disposition", "attachment; filename=" + fileName);
  }
  OutputStream out = response.getOutputStream();
        while ((len = br.read(buf)) > 0)
            out.write(buf, 0, len);
        br.close();
        out.close();

抱歉!评论已关闭.