fei
2 天以前 5d91a329768a2a86e01e4b9b6bc6a2b939b87adb
ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java
@@ -910,12 +910,15 @@
                style.cloneStyleFrom(styles.get("data"));
                style.setAlignment(HorizontalAlignment.CENTER);
                style.setVerticalAlignment(VerticalAlignment.CENTER);
                style.setFillForegroundColor(excel.headerBackgroundColor().index);
                style.setFillPattern(FillPatternType.SOLID_FOREGROUND);
                // 已注释,表头不显示背景色
                // style.setFillForegroundColor(excel.headerBackgroundColor().index);
                // style.setFillPattern(FillPatternType.SOLID_FOREGROUND);
                // 设置表头自动换行
                style.setWrapText(true);
                Font headerFont = wb.createFont();
                headerFont.setFontName("Arial");
                headerFont.setFontHeightInPoints((short) 10);
                headerFont.setBold(true);
                headerFont.setBold(false);
                headerFont.setColor(excel.headerColor().index);
                style.setFont(headerFont);
                // 设置表格头单元格文本形式
@@ -1054,7 +1057,7 @@
        }
        else if (ColumnType.IMAGE == attr.cellType())
        {
            ClientAnchor anchor = new XSSFClientAnchor(0, 0, 0, 0, (short) cell.getColumnIndex(), cell.getRow().getRowNum(), (short) (cell.getColumnIndex() + 1), cell.getRow().getRowNum() + 1);
            ClientAnchor anchor = new HSSFClientAnchor(0, 0, 0, 0, (short) cell.getColumnIndex(), cell.getRow().getRowNum(), (short) (cell.getColumnIndex() + 1), cell.getRow().getRowNum() + 1);
            String propertyValue = Convert.toStr(value);
            if (StringUtils.isNotEmpty(propertyValue))
            {
@@ -1145,8 +1148,8 @@
        Cell cell = null;
        try
        {
            // 设置行高
            row.setHeight(maxHeight);
            // 设置行高为自动调整
           // row.setHeight((short) -1);
            // 根据Excel中设置情况决定是否导出,有些情况需要保持为空,希望用户填写这一列.
            if (attr.isExport())
            {
@@ -1159,8 +1162,14 @@
                        sheet.addMergedRegion(new CellRangeAddress(subMergedFirstRowNum, subMergedLastRowNum, column, column));
                    }
                }
                cell.setCellStyle(styles.get(StringUtils.format("data_{}_{}_{}_{}_{}", attr.align(), attr.color(), attr.backgroundColor(), attr.cellType(), attr.wrapText())));
             //   cell.setCellStyle(styles.get(StringUtils.format("data_{}_{}_{}_{}_{}", attr.align(), attr.color(), attr.backgroundColor(), attr.cellType(), attr.wrapText())));
                // 获取并修改样式
                CellStyle style = styles.get(StringUtils.format("data_{}_{}_{}_{}_{}", attr.align(), attr.color(), attr.backgroundColor(), attr.cellType(), attr.wrapText()));
                Workbook workbook = row.getSheet().getWorkbook();
                CellStyle newStyle = workbook.createCellStyle();
                newStyle.cloneStyleFrom(style);
                newStyle.setWrapText(true); // 关键:启用自动换行
                cell.setCellStyle(newStyle);
                // 用于读取对象中的属性
                Object value = getTargetValue(vo, field, attr);
                String dateFormat = attr.dateFormat();
@@ -1198,6 +1207,8 @@
                    // 设置列类型
                    setCellVo(value, attr, cell);
                }
                adjustRowHeightAfterSetValue(row, cell, value);
                addStatisticsData(column, Convert.toStr(value), attr);
            }
        }
@@ -1207,7 +1218,65 @@
        }
        return cell;
    }
    /**
     * 设置值后调整行高
     */
    private void adjustRowHeightAfterSetValue(Row row, Cell cell, Object value) {
        if (value == null) return;
        String text = value.toString();
        Sheet sheet = row.getSheet();
        // 1. 计算自动高度(基于内容)
        short autoHeight = calculateSimpleAutoHeight(text, cell);
        // 2. 获取当前行高
        short currentHeight = row.getHeight();
        if (currentHeight == -1) {
            currentHeight = sheet.getDefaultRowHeight();
        }
        // 3. 使用较大的高度(自动计算的高度或当前高度)
        short baseHeight = (short) Math.max(currentHeight, autoHeight);
        System.out.println(baseHeight+"aaaaaaaaatttttttt");
        // 4. 在基础上增加额外高度(100单位 = 5点)
        short extraHeight = 80;
        short newHeight = (short) (baseHeight + extraHeight);
        // 5. 限制最大高度
        short maxHeight = (short) 4000; // 100点
        row.setHeight((short) Math.min(maxHeight,newHeight));
    }
    /**
     * 简化的自动高度计算
     */
    private short calculateSimpleAutoHeight(String text, Cell cell) {
        if (text == null || text.isEmpty()) return 0;
        Sheet sheet = cell.getSheet();
        int colIndex = cell.getColumnIndex();
        // 获取列宽(字符数)
        int colWidthChars = sheet.getColumnWidth(colIndex) / 256;
        if (colWidthChars <= 0) colWidthChars = 10;
        // 计算文本行数
        int lines = 1;
        if (text.contains("\n")) {
            // 有显式换行
            String[] parts = text.split("\n");
            for (String part : parts) {
                lines += Math.max(1, (int) Math.ceil(part.length() * 1.5 / colWidthChars));
            }
        } else {
            // 自动换行
            lines = (int) Math.ceil(text.length() * 1.5 / colWidthChars);
        }
        // 每行高度:假设18点(360 POI单位)
        return (short) (lines * 360);
    }
    /**
     * 设置 POI XSSFSheet 单元格提示或选择框
     * 
@@ -1658,7 +1727,7 @@
     */
    public void createWorkbook()
    {
        this.wb = new SXSSFWorkbook(500);
        this.wb = new HSSFWorkbook();
        this.sheet = wb.createSheet();
        wb.setSheetName(0, sheetName);
        this.styles = createStyles(wb);