Java POI: 解决"ClassCastException: org.apache.poi.xssf.streaming.SXSSFDrawing cannot be cast to org.apache.poi.hssf.usermodel.HSSFPatriarch" 错误
根据错误提示,可以看出问题出现在以下这行代码上:
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(); // 调整图片大小
}
这样就能够解决这个错误了。
原文地址: https://www.cveoy.top/t/topic/qC96 著作权归作者所有。请勿转载和采集!