资讯专栏INFORMATION COLUMN

使用POI导出Excel例子与常见问题

linkFly / 1844人阅读

代码
function toExcel(){
    $("#formExcel").submit();
}
@RequestMapping(value="/toExcel",method=RequestMethod.POST)
    public String toExcel(HttpServletResponse response, String fileName, String tableName, String type, String where){
        if (StringUtils.isNotEmpty(fileName) && StringUtils.isNotEmpty(tableName) && StringUtils.isNotEmpty(type)) {
            inteQueryService.toExcel(response,fileName,tableName,type,where);
            return null;
        }
        return null;
    }
public static void toExcel(HttpServletResponse response,List> lists,String name,String[] strArr){
        List[] totals = splitList(lists,65000);

        // 创建工作簿
        HSSFWorkbook wb = new HSSFWorkbook();
        // 由工作簿创建工作表
        for (int j = 0; j < totals.length; j++) {

            HSSFSheet sheet = wb.createSheet("sheet"+(j+1));
            // 在工作表中创建行
            HSSFRow row = sheet.createRow(0);
            // 创建单元格,设置每个单元格的字段名
            HSSFCell cell = null;
            for (int i = 0; i < strArr.length; i++) {
                cell = row.createCell(i);
                cell.setCellValue(strArr[i]);
            }

            List> list = totals[j];
            for (int i = 0; i < list.size(); i++) {
                Iterator iter = list.get(i).entrySet().iterator();
                row = sheet.createRow(i+1);
                cell = row.createCell(0);
                cell.setCellValue(i+1);
                int index = 1;
                while (iter.hasNext()) {
                    Map.Entry entry = (Map.Entry) iter.next();
                    //Object key = entry.getKey();
                    Object val = entry.getValue();
                    cell = row.createCell(index);
                    cell.setCellValue(val.toString());
                    index++;
                }
            }
        }

        ServletOutputStream sos = null;

        try {
            String fileName = name+".xls";

            response.setContentType("application/vnk.ms-excel");
            response.setHeader("Content-disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));
            response.setContentType("application/msexcel;charset=utf-8");
            response.resetBuffer();

            sos = response.getOutputStream();
            wb.write(sos);
            sos.flush();

        } catch (IOException e) {
            logger.error("导出excel工具类报错",e);
        } finally {
            try {
                sos.close();
            } catch (IOException e) {
                logger.error("导出excel工具类报错",e);
            }
        }
    }
public static List[] splitList(List list, Integer pageSize) {
        if(pageSize == null){
            pageSize = 300;
        }
        int total = list.size();
        //总页数
        int pageCount = total % pageSize == 0 ? total / pageSize : total / pageSize + 1;
        List[] result = new List[pageCount];
        for(int i = 0; i < pageCount; i++) {
            int start = i * pageSize;
            //最后一条可能超出总数
            int end = start + pageSize > total ? total : start + pageSize;
            List subList = list.subList(start, end);
            result[i] = subList;
        }
        return result;
    }
常见问题

前台一定要使用表单的方式进行提交,ajax是不行的,因为ajax只能接受 xml、 json、html等类似字符串的返回,不能接受流作为返回值。否则程序不报错,就是不弹下载框。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/66409.html

相关文章

  • 使用ApachePOI生成XLSX格式Excel文档大数据量导出

    摘要:最近在做使用进行大数据量导出,现在把其整理成工具类供大家参考。版本增加了前缀为相关的类,主要用于大数据量的写入与读取。 最近在做使用POI进行大数据量导出,现在把其整理成工具类供大家参考。Apache POI 3.8版本增加了前缀为SXSSF相关的类,主要用于大数据量的写入与读取。关于ApachePOI导出Excel基本的使用我这里就不详解了,具体参考: Apache POI官方网站...

    Shihira 评论0 收藏0
  • java 导出 excel 最佳实践,java 大文件 excel 避免OOM(内存溢出) exce

    摘要:消费之后,多线程处理文件导出,生成文件后上传到等文件服务器。前端直接查询并且展现对应的任务执行列表,去等文件服务器下载文件即可。这客户体验不友好,而且网络传输,系统占用多种问题。拓展阅读导出最佳实践框架 产品需求 产品经理需要导出一个页面的所有的信息到 EXCEL 文件。 需求分析 对于 excel 导出,是一个很常见的需求。 最常见的解决方案就是使用 poi 直接同步导出一个 exc...

    K_B_Z 评论0 收藏0
  • Excel大批量数据的导入和导出,如何做优化?

    摘要:并且在对的抽象中,每一行,每一个单元格都是一个对象。对支持使用官方例子需要继承,覆盖方法,每读取到一个单元格的数据则会回调次方法。概要Java对Excel的操作一般都是用POI,但是数据量大的话可能会导致频繁的FGC或OOM,这篇文章跟大家说下如果避免踩POI的坑,以及分别对于xls和xlsx文件怎么优化大批量数据的导入和导出。一次线上问题这是一次线上的问题,因为一个大数据量的Excel导出...

    Tecode 评论0 收藏0
  • POI如何高效导出百万级Excel数据?

    摘要:阅读原文如何高效导出百万级数据在一个具有统计功能的系统中,导出功能几乎是一定的,如何导出导出的数据有多少如何高效的导出简介什么是就不用介绍了,这里主要说明不同版本下每个下的行列限制。 阅读原文:POI如何高效导出百万级Excel数据? 在一个具有统计功能的系统中,导出excel功能几乎是一定的,如何导出excel?导出的数据有多少?如何高效的导出? Excel简介什么是excel就不用...

    lemanli 评论0 收藏0
  • poi导出excel

    摘要:积分消费明细对账单其中,有四个参数,分别是,,,。导出读取数据库的信息,转成。 public void detailExport() { String sourceSystem = getPara(source_system); String dataDate = getPara(data_date); Integer pointsType = get...

    RayKr 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<