菜鸟先生就是我 2024-04-24 16:39 采纳率: 0%
浏览 93

使用easyexcel导出文件时报错

使用easyexcel导出文件时报错

使用easyexcel导出文件时报:Caused by: java.lang.NoSuchMethodError: com.alibaba.excel.write.builder.ExcelWriterBuilder.registerWriteHandler(Lcom/alibaba/excel/write/handler/WriteHandler;)Lcom/alibaba/excel/write/builder/AbstractExcelWriterParameterBuilder;
按照网上的方法,清理了缓存,升级了easyexcel版本,均不能解决

String outputFilePath = setOutputFilePath();
            EasyExcelFactory.write(outputFilePath, ExportQueryAppealResultHead.class)
                   .registerWriteHandler(handlerStyleWrite())
                    .sheet("sheet1")
                    .doWrite(queryAppealResultHeads);

/**
     * 拦截器形式自定义样式(推荐使用注解 参照{@link })
     */
    public HorizontalCellStyleStrategy handlerStyleWrite() {
        /**
         * 为标题/表头 设置样式
         * 1、WriteCellStyle:表示单元格格样式
         * 2、WriteFont:表示字体样式
         * 3、setFillForegroundColor(Short fillForegroundColor) :设置前景色
         * 4、setFontHeightInPoints(Short fontHeightInPoints):设置字体大小
         */
        WriteFont headWriteFont = new WriteFont();
        headWriteFont.setFontHeightInPoints((short) 12);
        headWriteFont.setBold(false);

        WriteCellStyle headWriteCellStyle = new WriteCellStyle();
        headWriteCellStyle.setFillForegroundColor(IndexedColors.LIGHT_CORNFLOWER_BLUE.getIndex());
        headWriteCellStyle.setWriteFont(headWriteFont);
        /**
         * 为正文内容设置样式,与设置表头基本一致
         * 1、setFillPatternType(FillPatternType fillPatternType):设置颜色填充类型
         */
        WriteFont contentWriteFont = new WriteFont();
        contentWriteFont.setFontHeightInPoints((short) 12);
        contentWriteFont.setFontName("宋体");

        WriteCellStyle contentWriteCellStyle = new WriteCellStyle();
        contentWriteCellStyle.setFillPatternType(FillPatternType.SOLID_FOREGROUND);
        contentWriteCellStyle.setFillForegroundColor(IndexedColors.WHITE.getIndex());
        contentWriteCellStyle.setWriteFont(contentWriteFont);

        //水平单元样式策略,设置表头和正文内容样式
        HorizontalCellStyleStrategy horizontalCellStyleStrategy = new HorizontalCellStyleStrategy(headWriteCellStyle, contentWriteCellStyle);

        return horizontalCellStyleStrategy;
    }

    public String setOutputFilePath() {
        File homeDirectory = FileSystemView.getFileSystemView().getHomeDirectory();
        return homeDirectory.getAbsolutePath() + File.separator + System.currentTimeMillis() + ".xlsx";
    }

easyexcel版本

<dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>easyexcel</artifactId>
            <version>3.1.0</version>
        </dependency>

  • 写回答

4条回答 默认 最新

  • 码农阿豪@新空间代码工作室 Java领域优质创作者 2024-04-24 16:44
    关注
    让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如果还有疑问可以评论或留言
    问题描述: 在使用easyexcel进行文件导出时,报错如下: Caused by: java.lang.NoSuchMethodError: com.alibaba.excel.write.builder.ExcelWriterBuilder.registerWriteHandler(Lcom/alibaba/excel/write/handler/WriteHandler;)Lcom/alibaba/excel/write/builder/AbstractExcelWriterParameterBuilder; 已尝试清理缓存和升级easyexcel版本,但未能解决问题。 代码示例: 以下是导出文件的代码示例,其中包括自定义样式和输出文件路径的设置。 public void exportQueryAppealResult(HttpServletResponse response, List queryAppealResultHeads) { try { String fileName = "query_appeal_result"; response.addHeader("Content-Disposition", String.format("attachment; filename="%s"", URLEncoder.encode(fileName, "UTF-8"))); ServletOutputStream outputStream = response.getOutputStream(); String outputFilePath = setOutputFilePath(); EasyExcelFactory.write(outputFilePath, QueryAppealResultHead.class) .registerWriteHandler(handlerStyleWrite()) .sheet("sheet1") .doWrite(queryAppealResultHeads); File outputFile = new File(outputFilePath); FileInputStream inputStream = new FileInputStream(outputFile); IOUtils.copy(inputStream, outputStream); outputStream.flush(); outputStream.close(); } catch (IOException e) { e.printStackTrace(); } finally { // 删除生成的文件 File outputFile = new File(outputFilePath); if (outputFile.exists() && outputFile.isFile()) { outputFile.delete(); } } } /** * 拦截器形式自定义样式(推荐使用注解 参照{@link }) */ public HorizontalCellStyleStrategy handlerStyleWrite() { /** * 为标题/表头 设置样式 * 1、WriteCellStyle:表示单元格格样式 * 2、WriteFont:表示字体样式 * 3、setFillForegroundColor(Short fillForegroundColor) :设置前景色 * 4、setFontHeightInPoints(Short fontHeightInPoints):设置字体大小 */ WriteFont headWriteFont = new WriteFont(); headWriteFont.setFontHeightInPoints((short) 12); headWriteFont.setBold(false); WriteCellStyle headWriteCellStyle = new WriteCellStyle(); headWriteCellStyle.setFillForegroundColor(IndexedColors.LIGHT_CORNFLOWER_BLUE.getIndex()); headWriteCellStyle.setWriteFont(headWriteFont); /** * 为正文内容设置样式,与设置表头基本一致 * 1、setFillPatternType(FillPatternType fillPatternType):设置颜色填充类型 */ WriteFont contentWriteFont = new WriteFont(); contentWriteFont.setFontHeightInPoints((short) 12); contentWriteFont.setFontName("宋体"); WriteCellStyle contentWriteCellStyle = new WriteCellStyle(); contentWriteCellStyle.setFillPatternType(FillPatternType.SOLID_FOREGROUND); contentWriteCellStyle.setFillForegroundColor(IndexedColors.WHITE.getIndex()); contentWriteCellStyle.setWriteFont(contentWriteFont); //水平单元样式策略,设置表头和正文内容样式 HorizontalCellStyleStrategy horizontalCellStyleStrategy = new HorizontalCellStyleStrategy(headWriteCellStyle, contentWriteCellStyle); return horizontalCellStyleStrategy; } public String setOutputFilePath() { File homeDirectory = FileSystemView.getFileSystemView().getHomeDirectory(); return homeDirectory.getAbsolutePath() + File.separator + System.currentTimeMillis() + ".xlsx"; } 解决方案: 根据报错信息,我们可以发现是ExcelWriterBuilder的方法无法找到。因此,我们可以考虑将导出文件的代码中使用了ExcelWriterBuilder的部分进行检查和调整。 首先,查看pom.xml中是否引入了正确的easyexcel依赖,并且无冲突依赖存在。可以尝试升级到最新版本,比如3.1.0版本,因为较老版本easyexcel中的方法可能已被废弃。 如果easyexcel版本已经正确,可以检查导出文件代码中使用ExcelWriterBuilder的部分,参考API文档进行调整。在本例中,我们可以发现使用registerWriteHandler方法导致了问题,因此我们需要将其调整为正确的方法。 修改后的代码示例如下: public void exportQueryAppealResult(HttpServletResponse response, List queryAppealResultHeads) { try { String fileName = "query_appeal_result"; response.addHeader("Content-Disposition", String.format("attachment; filename="%s"", URLEncoder.encode(fileName, "UTF-8"))); ServletOutputStream outputStream = response.getOutputStream(); String outputFilePath = setOutputFilePath(); ExcelWriter writer = EasyExcelFactory.getWriter(outputStream).registerWriteHandler(handlerStyleWrite()).sheet("sheet1").build(); writer.write(queryAppealResultHeads, EasyExcelUtil.getWriteSheet()); writer.finish(); outputStream.flush(); outputStream.close(); } catch (IOException e) { e.printStackTrace(); } finally { // 删除生成的文件 File outputFile = new File(outputFilePath); if (outputFile.exists() && outputFile.isFile()) { outputFile.delete(); } } } public String setOutputFilePath() { File homeDirectory = FileSystemView.getFileSystemView().getHomeDirectory(); return homeDirectory.getAbsolutePath() + File.separator + System.currentTimeMillis() + ".xlsx"; } public Sheet getWriteSheet() { Sheet sheet = new Sheet(1, 0, QueryAppealResultHead.class); sheet.setSheetName("sheet1"); return sheet; } /** * 拦截器形式自定义样式 */ public WriteHandler handlerStyleWrite() { return new WriteHandler() { @Override public void afterSheetCreate(WriteWorkbook writeWorkbook, WriteSheet writeSheet) { //为标题/表头设置样式 Row row = writeSheet.getRow(0); if (row != null) { Iterator iterator = row.cellIterator(); while (iterator.hasNext()) { Cell cell = iterator.next(); cell.setCellStyle(headCellStyle(writeWorkbook)); } } //为正文内容设置样式 List rows = writeSheet.getSheet().getRowList(); if (rows.size() > 1) { for (int i = 1; i < rows.size(); i++) { Row dataRow = rows.get(i); if (dataRow != null) { Iterator dataIterator = dataRow.cellIterator(); while (dataIterator.hasNext()) { Cell cell = dataIterator.next(); cell.setCellStyle(contentCellStyle(writeWorkbook)); } } } } } }; } /** * 为标题/表头设置样式 */ private CellStyle headCellStyle(WriteWorkbook writeWorkbook) { CellStyle headCellStyle = writeWorkbook.createCellStyle(); headCellStyle.setFillForegroundColor(IndexedColors.LIGHT_CORNFLOWER_BLUE.getIndex()); headCellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND); Font font = writeWorkbook.createFont(); font.setFontHeightInPoints((short) 12); font.setBold(false); headCellStyle.setFont(font); return headCellStyle; } /** * 为正文内容设置样式 */ private CellStyle contentCellStyle(WriteWorkbook writeWorkbook) { CellStyle contentCellStyle = writeWorkbook.createCellStyle(); contentCellStyle.setFillForegroundColor(IndexedColors.WHITE.getIndex()); contentCellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND); Font font = writeWorkbook.createFont(); font.setFontHeightInPoints((short) 12); font.setFontName("宋体"); contentCellStyle.setFont(font); return contentCellStyle; } 在修改后的代码中,我们首先使用了新的构造方式创建ExcelWriter,并使用getWriter方法获取Writer。在导出文件时,我们使用新的方法write和finish向Writer中写入数据并完成导出,其中也包括设置自定义样式的操作。与此同时,我们还定义了Sheet和Cell样式的设置方法,以方便重复使用。 建议大家在使用easyexcel进行文件导出时,参考官方文档和API进行操作,并注意easyexcel版本及其所依赖的其他库的管理,以避免出现类似问题。
    评论

报告相同问题?

问题事件

  • 创建了问题 4月24日

悬赏问题

  • ¥15 preLaunchTask"C/C++: aarch64- apple-darwin22-g++-14 生成活动 文件”已终止,退出代码为-1。
  • ¥18 关于#贝叶斯概率#的问题:这篇文章中利用em算法求出了对数似然值作为概率表参数,然后进行概率表计算,这个概率表是怎样计算的呀
  • ¥20 C#上传XML格式数据
  • ¥15 elementui上传结合oss接口断点续传,现在只差停止上传和继续上传,各大精英看下
  • ¥100 单片机hardfaulr
  • ¥20 手机截图相片分辨率降低一半
  • ¥50 求一段sql语句,遇到小难题了,可以50米解决
  • ¥15 速求,对多种商品的购买力优化问题(用遗传算法、枚举法、粒子群算法、模拟退火算法等方法求解)
  • ¥100 速求!商品购买力最优化问题(用遗传算法求解,给出python代码)
  • ¥15 虚拟机检测,可以是封装好的DLL,可付费