根据错误提示,可以看出问题出现在以下这行代码上:

HSSFPatriarch patriarch = (HSSFPatriarch) sheet.createDrawingPatriarch();

错误信息是'org.apache.poi.xssf.streaming.SXSSFDrawing cannot be cast to class org.apache.poi.hssf.usermodel.HSSFPatriarch',这意味着你正在尝试将SXSSFDrawing对象转换为HSSFPatriarch对象,但它们不是同一种类型。

这个问题的原因是你正在使用的是XSSF模块(POI的基于XML的Excel格式),但你的代码中却引用了HSSF模块(POI的传统Excel格式)的类。

解决办法是:

  • 将代码中的HSSFPatriarch替换为对应的XSSF类,即XSSFDrawing。
  • 将代码中的HSSFWorkbook替换为对应的XSSFWorkbook。

修改后的代码如下:

XSSFDrawing patriarch = (XSSFDrawing) sheet.createDrawingPatriarch();

...

if(dataKeys[cellNum].equals('images'))
{
    URL imageUrl = new URL(value);
    InputStream imageStream = imageUrl.openStream();
    byte[] byteArray = IOUtils.toByteArray(imageStream);
    int pictureIndex = wb.addPicture(byteArray, Workbook.PICTURE_TYPE_JPEG); // byteArray为图片的字节数组
    XSSFClientAnchor anchor = new XSSFClientAnchor(0, 0, 0, 0, (short) cellNum, i+rowcount, (short) (cellNum+1), i+rowcount+1);
    XSSFPicture picture = patriarch.createPicture(anchor, pictureIndex);
    picture.resize(); // 调整图片大小
}

这样就能够解决这个错误了。

Java POI: 解决

原文地址: https://www.cveoy.top/t/topic/qC96 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录