java poi创建excel表并引用浏览器下载-实用方法

想把当前页面需要的数据生成excel表,需要先把数据传到后台去,我传的时候用的是json格式数据。主要是方便到时候从中取值,各位就按各自喜好就行了。

//这里是实现类impl里面
//先定义创建excel表头
        String[] title={"姓名","性别","年龄"};
//创建excel工作簿
        HSSFWorkbook workbook=new HSSFWorkbook();
//创建工作表sheet
        HSSFSheet sheet=workbook.createSheet();
//创建第一行,由于表头字段是固定好的,所以第一行的值单独插入就行了
        HSSFRow row=sheet.createRow(0);//和数组下标一样,从0开始
        HSSFCell cell=null;
//插入第一行数据的表头,用到上面的title数组
        for(int i=0;i<title.length;i++){
        //createCell(0)表示从左到右第一个空格哈,是依横向次插入的。
            cell=row.createCell(i);
            cell.setCellValue(title[i]);
        }
//此时,excel表的表头部分就完成了。
//现在开始放入内容
        //由于之前表头已经占据一行了,所以现在从第二行开始插入
        HSSFRow nrow = sheet.createRow(1);
        HSSFCell ncell = nrow.createCell(0);
        ncell.setCellValue("张三");
        ncell = nrow.createCell(1);
        ncell.setCellValue("男");
        ncell = nrow.createCell(2);
        ncell.setCellValue("20");
        //至此,就完整的插入一行了。
        //插入的方法有很多,循环遍历等等都可以,也是看各自喜好。

以上算是完整的excel内容搭建好了,由于不是创建到本地,所以不把excel写到输出流去创建了。因为我们现在是要用浏览器直接去下载它。
现在继续~~~

//创建一个输出类,response来于方法的参数栏里
//public void createExcel(HttpServletResponse response)throws IOException{}
//因为用到流,所以为了捕获异常需要IOException
//具体的大家可以下来去了解
        OutputStream output = response.getOutputStream();
//清空缓存
        response.reset();
//定义浏览器响应表头,顺带定义下载名,比如students
        response.setHeader("Content-disposition", "attachment;filename=students.xls");
//定义下载的类型,标明是excel文件
        response.setContentType("application/vnd.ms-excel");
//这时候把创建好的excel写入到输出流
        workbook.write(output);
//养成好习惯,出门记得随手关门
        output.close();

以上,就是完整的一套方法,可以让浏览器响应并下载。
需要用到的jar包有 poi-xx.jar,poi-ooxml-xx.jar,用啥版本看自己。
之后还需要注意的是,如果你是前台单纯用ajax传值,你会惊喜的发现完全不起作用哈,原因是说ajax不能传递流,大家可以下来了解下
我的解决方法是:

//方法一:用跳转地址的方式去进行get提交数据,注意后台接收为GET
    window.location.href="地址?json="+json
    //注意需要先转换编码格式,然后后台再转换回来,因为如果有汉字会乱码
    //此方法有局限性,就是不能提交的数据多了
    //超出了get提交的长度限制就会报错无法提交,对于post来说则没有限制
//方法二:用post方式提交,需要用到表单form提交方式,后台接收为POST
    //我是直接写到body里面然后隐藏的,你们怎么写就随意了
    <form action="地址" method="post" style="display:none">
        <input type="hidden" name="json" class="json"/>
        <input type="submit" id="submit_btn"/>
    </form>
    //type为hidden的时候,就是是一个隐藏域了,它的值放在value里面。
    //现在我们在js里去写一下方法。
    var json = "获取你需要生成excel的数据";
    //把数据放入value中
    $(".json").attr("value",json);
    //由于form表单隐藏了,我们要点击submit提交就让它自动激活。
    document.getElementById("submit_btn").click();
    //这样就可以直接提交到后台。并能够成功让浏览器响应下载。
    //后台接收需要HttpServletRequest,接收参数json为表单name名
    String json = request.getParameter("json")
//方法三是要引用一个form的js文件,我还没有试过,主要是懒得引用,哈哈
//引用后可以使用ajaxSubmit方法提交,达到浏览器相应目的。
//方法是多种多样的,大家可以下来试试

至此,所有的流程就搞定了,这是浏览器下载excel效果图
这里写图片描述
如果有更好的方法,欢迎留言。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值