alibaba/easyexcel

Hyperlink未释放导致内存溢出?

Open

#3.800 aberto em 21 de mai. de 2024

Ver no GitHub
 (0 comments) (0 reactions) (0 assignees)Java (7.599 forks)batch import
help wanted

Métricas do repositório

Stars
 (33.728 stars)
Métricas de merge de PR
 (Nenhuma PRs mesclada em 30d)

Description

异常代码

    static class ExcelHyperlinkHandler implements CellWriteHandler {

        private CellStyle rowLinkStyle;

//        private Hyperlink hyperlink;

        @Override
        public void afterCellDispose(CellWriteHandlerContext context) {
            Cell cell = context.getCell();
            // 这里可以对cell进行任何操作
            int rowIndex = cell.getRowIndex();
            int columnIndex = cell.getColumnIndex();
            String stringCellValue = cell.getStringCellValue();
            log.info("第{}行,第{}列写入完成。", rowIndex, columnIndex);
            Map<String, String> workOrderLinkMap = WorkOrderLinkHolder.get();
            // 第一列添加超链接(排除第一行表头)
            Workbook workbook = context.getWriteWorkbookHolder().getWorkbook();
            if (columnIndex == 0 && rowIndex != 0) {
                CreationHelper createHelper = context.getWriteSheetHolder().getSheet().getWorkbook().getCreationHelper();
                // 单元格下划线和字体蓝色
                if (rowLinkStyle == null) {
                    rowLinkStyle = workbook.createCellStyle();
                    rowLinkStyle.setWrapText(true);
                    XSSFFont linkFont = (XSSFFont) workbook.createFont();
                    linkFont.setColor((short) 12);
                    linkFont.setUnderline(Font.U_SINGLE);
                    rowLinkStyle.setFont(linkFont);
                }
                // 设置单元格为超链接样式
                Hyperlink hyperlink = createHelper.createHyperlink(HyperlinkType.URL);
                String url = workOrderLinkMap.get(stringCellValue);
                hyperlink.setAddress(url);
                cell.setHyperlink(hyperlink);
                cell.setCellStyle(rowLinkStyle);
            }
        }

    }

问题描述

分批导出20万行数据,每页500,Hyperlink对象创建了20万个,不应该每页500条写入完后释放吗?

Guia do colaborador