欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-04-30 18:25:29
...

项目情况:

      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行数据。

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

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

 

相关标签: poi