POI:解决使用poi自带的excel自适应列宽方法导出的excel表头被遮挡问题

项目情况:

      pmdb项目中需要导出excel文件,因为文件格式为最简单的表格样式,所以编写了一个通用的方法,通过输入查询出来的数据,生成excel,使用自适应的方式设置列宽。这时候虽然根据表格内容设置的列宽满足要求,但是表头的部分标题因为过长导致被遮挡。

解决方式:

     查询了poi底层实现之后,发觉它是通过SheetUtil的getColumnWidth方法获取每列中每个单元格中内容的长度进行计算的。于是,我决定使用这个方法将所有的表头的标题内容长度取出来,判断这个长度是否大于sheet中的该列计算出来的列宽,如果是,就设置该列的列宽为标题的长度。

代码:

 //根据类型指定excel文件的列宽
    private static void setColumnWidthByType(SXSSFSheet sheet,int titleLength) {
        sheet.trackAllColumnsForAutoSizing();
        for(int i=0;i<titleLength;i++){
            int columnWidth = sheet.getRow(0).getCell(i).getStringCellValue().length();//获取表头的宽度
            int autowidth=(int)SheetUtil.getColumnWidth(sheet,i,false,1,sheet.getLastRowNum());
            if(columnWidth>autowidth){
                sheet.setColumnWidth(i, (int)256.0D*(columnWidth+1));
            }else{
                sheet.autoSizeColumn(i);
            }
        }
    }

备注:

       如果导出的表格行数过多,sheet.getRow(0)就会返回null。原因是SXSSFWorkbook初始化的时候默认传递rowAccessWindowSize的值为100,也就是说只能显示100行数据。

解决这个问题只需要在创建对象的时候传入-1即可,这样导出的excel就不受行数的限制了:SXSSFWorkbook sxssfWorkbook = new SXSSFWorkbook(-1);

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值