Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在java中使用Apache poi 3.8在Excel文件上写入图像时的java.util.NoSuchElementException

在java中使用Apache poi 3.8在Excel文件上写入图像时的java.util.NoSuchElementException
EN

Stack Overflow用户
提问于 2019-03-08 09:46:05
回答 1查看 832关注 0票数 1

当我调用resize方法时,我遇到了不一致的异常。由于下面的错误,它失败了10%的时间。我不能在我的本地环境中复制它。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
java.util.NoSuchElementException
    at javax.imageio.spi.FilterIterator.next(ServiceRegistry.java:836)
    at javax.imageio.ImageIO$ImageReaderIterator.next(ImageIO.java:528)
    at javax.imageio.ImageIO$ImageReaderIterator.next(ImageIO.java:513)
    at org.apache.poi.ss.util.ImageUtils.getImageDimension(ImageUtils.java:64)
    at org.apache.poi.xssf.usermodel.XSSFPicture.getImageDimension(XSSFPicture.java:278)
    at org.apache.poi.xssf.usermodel.XSSFPicture.getPreferredSize(XSSFPicture.java:203)
    at org.apache.poi.xssf.usermodel.XSSFPicture.resize(XSSFPicture.java:170)
    at org.apache.poi.xssf.usermodel.XSSFPicture.resize(XSSFPicture.java:152)

请提出任何根本原因。

我编写的代码片段如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Sheet sheet2 = workbook.createSheet("Graph");
            //feedChartToExcel = new FileInputStream("C:\\Users\\idnyob\\Desktop\\PcrChartImageFogX7eRH4c1551955300676.png");
            feedChartToExcel = new FileInputStream(this.imagePath);

            // Convert picture to be added into a byte array
            byte[] bytes = IOUtils.toByteArray(feedChartToExcel);


            // Add Picture to Workbook, Specify picture type as PNG and Get an Index
            int pictureId = workbook.addPicture(bytes, Workbook.PICTURE_TYPE_PNG);
            // Close the InputStream. We are ready to attach the image to workbook now
            feedChartToExcel.close();
            // Create the drawing container
            XSSFDrawing drawing = (XSSFDrawing) sheet2.createDrawingPatriarch();
            //  Create an anchor point
            XSSFClientAnchor anchor = new XSSFClientAnchor();
            //  Define top left corner, and we can resize picture suitable from there
            anchor.setCol1(2);
            anchor.setRow1(1);
            // Invoke createPicture and pass the anchor point and ID
            XSSFPicture picture = drawing.createPicture(anchor, pictureId);
            // Call resize method, which resizes the image
            picture.resize();
EN

回答 1

Stack Overflow用户

发布于 2019-03-09 11:10:34

因为问题是关于该异常的根本原因,所以答案如下:

org.apache.poi.ss.util.ImageUtils.getImageDimension执行以下操作:

如果给定的类型是Workbook.PICTURE_TYPE_JPEGWorkbook.PICTURE_TYPE_PNGWorkbook.PICTURE_TYPE_DIB,则它使用javax.imageio.ImageIO从给定的InputStream创建ImageInputStream。然后,它获得该ImageReader的可能ImageInputStream s的Iterator。然后它就做错了。它调用Iterator.next来获取第一个可能的ImageReader,而不检查Iterator是否有下一个元素。如果Iterator中没有下一个元素,它将拖拽java.util.NoSuchElementException

但是为什么Iterator中没有下一个元素呢?因为只有一个调用Iterator.next,所以Iterator中甚至没有一个ImageReaderIterator甚至没有一个元素。但这意味着,javax.imageio.ImageIO无法找到声称能够解码所提供的ImageInputStream的当前注册的ImageReader。这意味着给定的InputStream不是来自jpegpngbmp图片的InputStream,或者当前没有注册的ImageReader声称能够正确解码jpegpngbmp图片。

由于它只在其他环境中不一致才会失败,并且在OP的本地环境中永远不会失败,因此第一个选项是不适用的。因此,我怀疑,如果它失败了,目前没有注册的ImageReader声称能够正确解码jpegpngbmp图片。所以我要做的是:

首先:确定失败的图片类型(jpegpngbmp)。

第二:确定它在哪种环境下出现故障(操作系统、Java版本、使用的框架等)。

apache poi版本无关紧要,因为即使apache poi 4.0.1也会在没有首先检查Iterator.next的情况下对Iterator.hasNext执行相同的错误调用:org.apache.poi.ss.util.ImageUtils.getImageDimension

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55060533

复制
相关文章
java POI读取Excel文件
import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Map; impo
用户7718188
2021/09/22
1.1K0
java POI读取Excel文件
java POI读取Excel文件 import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import
大师级码师
2021/09/21
9080
使用JAVA读取和写入EXCEL文件
下载地址http://download.csdn.net/detail/u010634066/8302683  下载直接用
石臻臻的杂货铺[同名公众号]
2021/07/14
1.8K0
Java使用 POI 操作Excel
Java中常见的用来操作 Excel 的方式有2种:JXL和POI。JXL只能对 Excel进行操作,且只支持到 Excel 95-2000的版本。而POI是Apache 的开源项目,由Java编写的跨平台 Java API,可操作 Microsoft Office。借助POI,可以方便的生成数据报表,数据批量上传,数据备份等工作。
宋先生
2019/07/18
6K0
Java使用 POI 操作Excel
java使用poi写入excel文档的一种解决方案
本人在学习使用selenium和UiAutomator的时候,学习了一excel文档的操作,前两天写了一个读取excel的方案,今天看了一下写入excel的,暂时用的Map<Integer,List<String[]>>作为写入源。现在分享出来,希望能对你有所帮助。
FunTester
2019/08/06
5660
Java 基于Apache POI实现Excel读写操作
以XSSFWorkbook API为例,可以通过多种方式来创建工作簿,常见用法如下:
授客
2023/08/02
7320
Java 基于Apache POI实现Excel读写操作
告别Apache POI,这才是Java读写Excel的利器
Java领域解析、生成Excel比较有名的框架有Apache poi、jxl等。但他们都存在一个严重的问题就是非常的耗内存。如果你的系统并发量不大的话可能还行,但是一旦并发上来后一定会OOM或者JVM频繁的full gc。
马拉松程序员
2022/04/26
1.6K0
告别Apache POI,这才是Java读写Excel的利器
Java中用Apache POI生成excel和word文档
最近在做项目的过程中遇到了excel的数据导出和word的图文表报告的导出功能,最后决定用Apache POI来完成该项功能。本文就项目实现过程中的一些思路与代码与大家共享,同时,也作为自己的一个总结,以备后用。
牛老师讲GIS
2018/10/23
3.2K0
Java中用Apache POI生成excel和word文档
一脸懵逼学习Java操作Excel之POI(Apache POI)
根据给定的文章内容,撰写摘要总结。
别先生
2018/01/02
3.3K0
一脸懵逼学习Java操作Excel之POI(Apache POI)
java中利用poi的XSSF产生Excel
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String fileModelName = ""; Boolean flag = Boolean.valueOf(request.getParameter("_eiExportFlag")); if (!flag) {
程序员小藕
2022/05/09
4890
每日一博 - Excel导入导出的那点事儿
想到数据的导入导出,大部分人最会想到apache的poi框架 以及Excel的版本问题。
小小工匠
2023/08/02
2220
每日一博 - Excel导入导出的那点事儿
在Excel中处理和使用地理空间数据(如POI数据)
因为不是所有规划相关人员,都熟悉GIS软件,或者有必要熟悉GIS软件,所以可能我们得寻求另一种方法,去简单地、快速地处理和使用地理空间数据——所幸,我们可以通过Excel自带的“三维地图”功能来简单满足一些差不多够用的需求。
Sidchen
2020/08/02
11K0
数据驱动框架(Apache POI – Excel)
自动化测试框架是用于创建和设计测试用例的一组准则或规则。该准则包括编码标准,对象存储库,测试数据处理方法,存储测试结果的过程或有关如何访问外部资源的任何其他信息。
用户8460142
2023/07/07
3050
数据驱动框架(Apache POI – Excel)
(13)SpringBoot使用poi上传excel文件
   摘要:本文主要讲解,在SpringBoot项目中如何使用poi上传excel文件。
IT云清
2022/05/07
2.1K0
在 CentOS 7 上使用 Apache 的 SSL 证书
本指南将向你演示如何启用 SSL 来保护由 CentOS 或者 Fedora 上的 Apache 提供服务的网站。
FesonX
2018/08/28
3.1K0
在 CentOS 7 上使用 Apache 的 SSL 证书
JAVA大数据导出EXCEL方案
Java当中常用的Excel文档导出主要有POI、JXL和“直接IO流”这三种方式,三种方式各自分别有不同的优势与缺点,下面将分行对其进行简
终身幼稚园
2019/07/19
6.2K1
JAVA的POI操作Excel
一个excel文件就是一个工作簿workbook,一个工作簿中可以创建多张工作表sheet,而一个工作表中包含多个单元格Cell,这些单元格都是由列(Column)行(Row)组成,列用大写英文字母表示,从A开始到Z共26列,然后再从AA到AZ又26列,再从BA到BZ再26列以此类推。行则使用数字表示,例如;A3 表示第三行第一列,E5表示第五行第五列。
intsmaze-刘洋
2018/08/29
1.3K0
JAVA的POI操作Excel
java poi拆分excel文件,每个文件保留标题行
在工作中,经常需要处理excel文件,将提供的excel文件导入数据库,有时候文件太大我们就需要做拆分了,下面实现将xlsx文件和xls文件按行数拆分,每个文件都保留标题行。这篇文件接着前面拆分csv大文件进行学习。
jiankang666
2022/05/12
8580
Apache POI使用详解[通俗易懂]
开发中经常会设计到excel的处理,如导出Excel,导入Excel到数据库中,操作Excel目前有两个框架,一个是apache 的poi, 另一个是 Java Excel
全栈程序员站长
2022/09/14
5K0
Apache POI使用详解[通俗易懂]
Apache POI 读取 Microsoft Office Excel 文档
Apache POI 项目的使命是创造和维护 Java API 操纵各种格式的文件,其中包括基于 Office Open XML 标准(OOXML)和微软的 OLE 2 Compound Document 格式(OLE2)。
HoneyMoose
2020/12/03
6580
Apache POI 读取 Microsoft Office Excel 文档

相似问题

Apache-POI/ Java/在写入Excel文件时省略行

118

使用apache POI将数据写入java中的excel文件

20

用apache poi从Java中写入Excel文件

20

使用apache poi在excel上写入WCC搜索结果时出错。

23

无法使用Apache POI写入Excel文件

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文