解决导出excel时FontConfiguration报空指针异常

文章讲述了在使用ApachePOI进行Excel导出时遇到FontConfiguration空指针异常的问题,原因在于服务器缺少字体库。解决方法是将SXSSFWorkbook替换为XSSFWorkbook,确保Workbook接口的正确实现。作者还提供了修复后的代码示例。
摘要由CSDN通过智能技术生成

解决导出时FontConfiguration报空指针异常.
报错信息如下:

java.lang.NullPointerException: null
        at sun.awt.FontConfiguration.getVersion(FontConfiguration.java:1264)
        at sun.awt.FontConfiguration.readFontConfigFile(FontConfiguration.java:219)
        at sun.awt.FontConfiguration.init(FontConfiguration.java:107)
        at sun.awt.X11FontManager.createFontConfiguration(X11FontManager.java:776)
        at sun.font.SunFontManager$2.run(SunFontManager.java:431)
        at java.security.AccessController.doPrivileged(Native Method)
        at sun.font.SunFontManager.<init>(SunFontManager.java:376)
        at sun.awt.X11FontManager.<init>(X11FontManager.java:57)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:422)
        at java.lang.Class.newInstance(Class.java:442)
        at sun.font.FontManagerFactory$1.run(FontManagerFactory.java:83)
        at java.security.AccessController.doPrivileged(Native Method)
        at sun.font.FontManagerFactory.getInstance(FontManagerFactory.java:74)
        at java.awt.Font.getFont2D(Font.java:491)
        at java.awt.Font.canDisplayUpTo(Font.java:2060)
        at java.awt.font.TextLayout.singleFont(TextLayout.java:470)
        at java.awt.font.TextLayout.<init>(TextLayout.java:531)
        at org.apache.poi.ss.util.SheetUtil.getDefaultCharWidth(SheetUtil.java:275)
        at org.apache.poi.xssf.streaming.AutoSizeColumnTracker.<init>(AutoSizeColumnTracker.java:117)
        at org.apache.poi.xssf.streaming.SXSSFSheet.<init>(SXSSFSheet.java:82)
        at org.apache.poi.xssf.streaming.SXSSFWorkbook.createAndRegisterSXSSFSheet(SXSSFWorkbook.java:658)
        at org.apache.poi.xssf.streaming.SXSSFWorkbook.createSheet(SXSSFWorkbook.java:679)
        at com.cgnpc.ssc.datastatisticsserver.framework.utils.PoiUtils.writeExcelSheets(PoiUtils.java:167)
        at com.cgnpc.ssc.datastatisticsserver.framework.utils.PoiUtils.exportSXSSF(PoiUtils.java:143)

报错原因是:
导出文件使用的是org.apache.poi.xssf.streaming下的SXSSFWorkbook,提示服务器字体库丢失文件。
在这里插入图片描述

解决方案:
换成了org.apache.poi.xssf.usermodel下的XSSFWorkbook,这样就可以导出了。
在这里插入图片描述

这两个类都实现了都是实现了Workbook接口,以上问题就解决了,下面附赠导出后续代码

XSSFWorkbook wb = ExcelUtils.writeExcel(sheetName, title, content, col, data);
        OutputStream os = null;
        try {
            HttpServletResponse response = HttpServlet.getResponse();
            response.setCharacterEncoding("UTF-8");
            response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
            //前端好像获取不到filename
            response.setHeader("Content-Disposition", "attachment;filename=" + new String(fileName.getBytes("utf-8"), "ISO8859-1"));
            os = response.getOutputStream();
            wb.write(os);
            os.flush();
            os.close();
        } catch (Exception e) {
            LogUtils.error(e.getMessage());
        } finally {
            if (os != null) {
                os.flush();
                os.close();
            }
        }
  • 11
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
导出Excel的速度快慢取决于多个因素。首先,Excel表的数据量对导出速度有直接影响。当Excel表数据量较大导出速度可能变慢,因为需要处理大量的数据。为了避免数据量大导致运行速度慢的问题,可以使用一些优化技巧,如使用缓存方式存储cell数据、采用异步队列处理导出等。引用中提到了使用异步队列的方式,通过给导出操作生成唯一id,并使用轮询的方式查找生成导出文件的目标地址,这样可以提升用户体验。同,根据引用,在PHP开发中,导出Excel可能会遇到超或超内存的问题,为了解决这些问题,可以优化代码、增加服务器配置、使用分片导出等方法来提高导出速度。因此,在导出Excel,我们需要考虑数据量、优化技巧和服务器配置等因素,来决定导出速度是快还是慢。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [EXCEL/WPS表格插件 艾敦制表神器](https://download.csdn.net/download/nxwjq/16738542)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatgptT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [PHPExcel导出Excel超内存分析与解决方案](https://blog.csdn.net/weixin_42430341/article/details/115597820)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatgptT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值