将数据写入excel表格,并下载

将数据从数据库查询出来,在写入文件,提供下载。这个功能经常需要用到,今天做的一个功能需要将数据写入excel。但是由于自己有一段时间没有写过,自己写的时候到处找例子写,几经周折终于完成了,为了下次自己不至于遗忘,特做此笔记。这个类是用apache的一个子项目poi的类SXSSFWorkbook 实现,需要poi-3.8.jar和poi-ooxml-3.8.jar两个jar包。废话不多说,直接上代码:

    public void writeInfile(List<Template> listtemp,HttpServletRequest request,
            HttpServletResponse response){
        String fileName="template.xls";
        FileOutputStream fos = null;
        List<Templatekinddetail> listkind = managerFacade.findAllTemplatekinddetail();
        try{
            String [] fields = new String[]{"模板名称","模板类型","模板内容"};
            SXSSFWorkbook wf = new SXSSFWorkbook();
            Sheet sh = wf.createSheet();
            //向excel表格中,插入表格的列名
            Row row= sh.createRow(0);
            for(int i=0;i<fields.length;i++){
                row.createCell(i).setCellValue(fields[i]);
            }
            // 从数据库中取出需要插入excel表格的对象
            for(int j=0;j<listtemp.size();j++){
                row= sh.createRow(j+1);
                Template tempo = listtemp.get(j);
                String temptype="";
                int tempkind= tempo.getTemplatekind();
                for(Templatekinddetail  tempkindpo :listkind){
                    if(tempkindpo.getId()==tempkind){
                        temptype = tempkindpo.getName();
                    }
                }
                row.createCell(0).setCellValue(tempo.getName());
                row.createCell(1).setCellValue(temptype);
                row.createCell(2).setCellValue(tempo.getContent());
            }
            //将数据插入到excel表中
            fos = new FileOutputStream(fileName);
            wf.write(fos);
            //文件下载
            File file = new File(fileName);
            if(file.exists()){
                FileInputStream fis = new FileInputStream(file);
                BufferedInputStream bis = new BufferedInputStream(fis);
                byte[] buffer = new byte[bis.available()];
                fis.read(buffer);
                //指定默认名(路径)
                response.addHeader("Content-Disposition","attachment; filename=\""+fileName+"\"");  
                OutputStream os = response.getOutputStream();
                os.write(buffer);   
                os.flush();   
                os.close();   
                bis.close();
                file.delete();
            }
            
        }catch(Exception ex){
            ex.printStackTrace();
        }finally{
            if(fos != null){
                try {
                    fos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        
    }


转载于:https://my.oschina.net/gao0516/blog/205114

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值