当前位置:   article > 正文

POI导出excel列宽自适应_hssfcellstyle 设置单元格宽度

hssfcellstyle 设置单元格宽度

前提:导出的excel单元格内容长的时候显示不全,用户看的时候需要手动调整列宽,不友好不方便。需要根据单元格的内容进行自动调整列宽。

废话不多说,直接上代码

controller

@PostMapping("/export")
    @ApiOperation("导出")
    public void export( HttpServletResponse response){
        service.commonExport(response);
    }
  • 1
  • 2
  • 3
  • 4
  • 5

service

public void export( HttpServletResponse response){
//表头,自己根据情况设置或者查询数据库
List<Map<String,Object>> tableTitleList;
//数据,自己根据情况设置或者查询
List<Map<String,Object>> dataList;

// 创建工作簿
HSSFWorkbook workbook = new HSSFWorkbook();
// 创建数据 sheet
 HSSFSheet dataSheet = workbook.createSheet("数据");

 // 创建表头行
HSSFRow headerRow = dataSheet.createRow(0);

//设置样式
CellStyle blackStyle = workbook.createCellStyle();
//自动换行,自定义列宽使用
blackStyle.setWrapText(true);
//存储最大列宽,自定义列宽使用
Map<Integer,Integer> maxWidth = new HashMap<>();
// 新增第一列id列,第一列是id值需要隐藏,单独设置
HSSFCell idDataCell = headerRow.createCell(0);
idDataCell.setCellValue("id");
int columnIndex = 1;
for (Map<String,Object> tableTitle : tableTitleList) {
     String columnName = tableTitle.get("title").toString();
     HSSFCell cell = headerRow.createCell(columnIndex);
     cell.setCellValue(columnName);
      maxWidth.put(columnIndex,columnName.getBytes().length  * 256 + 200);
      //设置自动换行
      cell.setCellStyle(blackStyle);
       columnIndex++;
    }

// 按行填充数据
        int rowIndex = 1;
        for (Map<String, Object> data : dataList) {
            HSSFRow dataRow = dataSheet.createRow(rowIndex++);
            columnIndex = 1;
            // 首先添加该行的第一列id数据
            String id = data.get("id").toString();
            HSSFCell idTitleCell = dataRow.createCell(0);
            HSSFRichTextString idRichString = new HSSFRichTextString(id);
            idTitleCell.setCellValue(idRichString);
            // 再循环遍历其余列,添加数据
            for (Map<String,Object> tableTitle : tableTitleList) {
                String titleName = tableTitle.get("title").toString().toLowerCase();
                Object value = data.get(titleName);
                HSSFCell cell = dataRow.createCell(columnIndex);
                if (value != null) {
                    HSSFRichTextString richString = new HSSFRichTextString(value.toString());
                    cell.setCellValue(richString);
                    int length = value.toString().getBytes().length * 256 + 200;
                    //这里把宽度最大限制到15000
                    if (length>15000){
                        length = 15000;
                    }
                    maxWidth.put(columnIndex,Math.max(length,maxWidth.get(columnIndex)));  
                    //设置自动换行                   
                    cell.setCellStyle(blackStyle);
                }
                columnIndex++;
            }
        }
        // 列宽自适应
        for (int i = 1; i <= tableTitleList.size(); i++) {
            dataSheet.setColumnWidth(i,maxWidth.get(i));
        }
        // 数据sheet页id列隐藏
        dataSheet.setColumnHidden(0,true);
//写出数据
try {
            response.setContentType("application/octet-stream");
            response.setHeader("Content-Disposition", "attachment; filename="
                    + URLEncoder.encode("test.xls", "UTF-8"));
            OutputStream out = response.getOutputStream();
            workbook.write(out);
            workbook.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/寸_铁/article/detail/812273
推荐阅读
相关标签
  

闽ICP备14008679号