alibaba/easyexcel

Hyperlink未释放导致内存溢出?

Open

#3,800 opened on May 21, 2024

View on GitHub
 (0 comments) (0 reactions) (0 assignees)Java (7,599 forks)batch import
help wanted

Repository metrics

Stars
 (33,728 stars)
PR merge metrics
 (No merged PRs in 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条写入完后释放吗?

Contributor guide