alibaba的easyexcel自定义列宽

   // 初始化标题行(这里存放的是表头内容)
        List<String> titleList = busDTO.getReportBusParamsFieldList().stream().map(ReportBusParamsFieldDTO::getField_label).collect(Collectors.toList());
        //初始化宽度 (这里存放的是表头列宽)
        List<Integer> widthList = busDTO.getReportBusParamsFieldList()
                .stream()
                .mapToInt(ReportBusParamsFieldDTO::getField_width)
                .map(width -> (int) (width * 1.5))
                .boxed()
                .collect(Collectors.toList());
        // 创建一个表格
        WriteTable table = new WriteTable();
        // 动态添加 表头 headList --> 所有表头行集合
        List<List<String>> headList = new ArrayList<>();
     for (int x = 0; x < titleList.size(); x++) {
            List<String> headTitle = new ArrayList<>();
            String titleName = titleList.get(x);
            // 自定义列宽处理器实例
            if (StringUtils.isNotEmpty(titleName) && MATCHING_TITLES.contains(titleName)) {
                widthList.set(x, 400);
            }
            headTitle.add(titleName);
            headList.add(headTitle);
        }
        table.setHead(headList);



     //记录Sheet尺寸(多sheet使用)此对象可以用来针对每列数据格式
        List<EasyExcelUtil.Dimension> dimensions = new ArrayList<>();
        // 导出数据
        ExcelWriter excelWriter = EasyExcelUtil.getWriterWorkbookWriteHandler(file, dimensions, true, headList.size(), widthList);
   // 根据rows进行sheet分页
            WriteSheet sheet = EasyExcel.writerSheet(sheetNo++, table_title + "_" + sheetName).build();
            // 数据写入 这里是每列的内容数据
            List<List<Object>> data = ReportExportProducerTools.formatData(mapList, busDTO.getReportBusParamsFieldList());
            excelWriter.write(data, sheet, table);

  上面获取表头数据,列的宽度,导出数据 ExcelWriter,获取WriteSheet,最后将数据写入表格。其中重要的getWriterWorkbookWriteHandler方法是修改单元格格式的

    /**
     * 生成表格写入对象
     * @param excel         文件
     * @param dimensions    数据
     * @param flag          是否需要根据表头列数设置样式
     * @param headColumns   表头列数
     * @return 文件写入对象
     */
    public static ExcelWriter getWriterWorkbookWriteHandler(File excel, List<Dimension> dimensions, boolean flag, int headColumns,List<Integer> widthList) {
        return EasyExcel.write(excel).registerWriteHandler(new AbstractWorkbookWriteHandler() {
            @Override
            public void afterWorkbookDispose(WriteWorkbookHolder writeWorkbookHolder) {
                super.afterWorkbookDispose(writeWorkbookHolder);
                Workbook workbook = writeWorkbookHolder.getWorkbook();
                for (int i = 0; i < workbook.getNumberOfSheets(); i++) {
                    Sheet sheet = workbook.getSheetAt(i);
                    if (flag) {
                        //设置表头样式
                        Row row = sheet.getRow(0);
                        // 设置表头行高
                        row.setHeightInPoints(20); // 设置行高为20磅

                        // 设置表头背景颜色
                        CellStyle style = workbook.createCellStyle();
                        //设置背景色
                        style.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex());
                        style.setFillPattern(FillPatternType.SOLID_FOREGROUND);
                        //设置文本位置
                        style.setAlignment(HorizontalAlignment.CENTER);
                        style.setVerticalAlignment(VerticalAlignment.CENTER);
                        //设置边框
                        style.setBorderRight(BorderStyle.DOTTED);
                        int width = 300 * 15;
                        // 获取表头列数
                        int columnCount = row.getLastCellNum();
                        // 获取表头单元格并设置样式
                        for (int j = 0; j < columnCount; j++) {
//                        for (int j = 0; j < headColumns; j++) {
                            Cell cell = row.getCell(j);
                            if (cell == null) {
                                cell = row.createCell(j);
                            }
                            cell.setCellStyle(style);
                            sheet.setColumnWidth(j,  widthList!=null?widthList.get(j)*15:width);
                        }
                    }
                    if (sheet instanceof SXSSFSheet) {
                        serRef(sheet, dimensions.get(i));
                    }
                }
            }
        }).build();
    }

 

 
posted @ 2024-05-28 11:31  教练我想打篮球  阅读(212)  评论(0编辑  收藏  举报