zoukankan      html  css  js  c++  java
  • POI Excel导出自适应列宽

    思路:只需要传入Sheet 即可计算,计算方式为,循环行后再循环列,然后Map记录列数,每个key就是每列的索引,循环时每列数据的替换上次记录最大长度,并计算宽度。

    ps:Excel有自动列宽方法(sheet.autoSizeColumn(列索引,short类型); //调整第一列宽度)也可以用,并且效率肯定是高于以下方法的,如果数据量非常大请忽略以下方法!

    使用方法:在你的Excel文件的所有数据渲染完成后并且在写出浏览器或本地文件夹之前调用这个方法即可!

        public static void cellSetWidth(Sheet sheet) {
            ///获取行
            int lastRowNum = sheet.getLastRowNum();
            Map<Integer, Integer> dataLen = new HashMap<>();
            // 循环每行 这儿循环有问题导致的  sheet size明明是3,但是获取的lastRowNum 是2  所以最后一行没去计算被忽略了-----ok
            for (int i = 0; i <= lastRowNum; i++) {
                Row row = sheet.getRow(i);
                // 每列
                short lastCellNum = row.getLastCellNum();
                for (int j = 0; j < lastCellNum; j++){
                    // 列值
                    String cellValue = row.getCell(j).getStringCellValue();
                    // 长度小于lastCellNum
                    if(dataLen.size() < lastCellNum){
                        dataLen.put(j, StringUtils.isBlank(cellValue) ? 0 : cellValue.getBytes().length);
                    }else {
                        Integer valLen = dataLen.get(j);
                        if(cellValue.length() > valLen){///内容值 》 上一次记录的最大值
                            dataLen.put(j, cellValue.getBytes().length);
                        }
                    }
                }
            }
            // 到这里就记录完了所有最大长度
            // 取出key和value值,开始计算
            Set<Map.Entry<Integer, Integer>> entryseSet = dataLen.entrySet();
            for (Map.Entry<Integer, Integer> entry : entryseSet) {
                int columnWidth = entry.getValue();//单元格占的字节数
                if (columnWidth > 33){
                    sheet.setColumnWidth(entry.getKey(), columnWidth * 140 + 1950);
                } else {
                    sheet.setColumnWidth(entry.getKey(), columnWidth + 3450);
                }
            }
        }
  • 相关阅读:
    HDU 5441 离线处理 + 并查集
    [转载]HDU 3478 判断奇环
    POJ 1637 混合图的欧拉回路判定
    [转载] 一些图论、网络流入门题总结、汇总
    UVA 820 --- POJ 1273 最大流
    [转载 ]POJ 1273 最大流模板
    POJ 3041 -- 二分图匹配
    2014西安现场赛F题 UVALA 7040
    UVA 12549
    割点、桥(一点点更新)
  • 原文地址:https://www.cnblogs.com/hjieone/p/15740835.html
Copyright © 2011-2022 走看看