HSSFObjectData的getObjectData()为byte[] 数组类型没有getInputSteam方法
时间: 2023-12-21 16:04:26 浏览: 86
C#自定义序列化ISerializable的实现方法
非常抱歉,我的回答有误。你是正确的,HSSFObjectData的getObjectData()方法返回的是byte数组类型,没有getInputStream()方法。在获取OLE对象的输入流时,应该使用HSSFWorkbook.getOLE2Embeddings()方法获取OLE对象的列表,然后遍历列表,获取每个OLE对象的输入流。具体步骤如下:
1. 使用POIFSFileSystem类读取Excel文件
```java
FileInputStream fis = new FileInputStream("example.xls");
POIFSFileSystem fs = new POIFSFileSystem(fis);
```
2. 获取OLE对象的输入流
```java
HSSFWorkbook wb = new HSSFWorkbook(fs);
List<HSSFObjectData> oleObjects = wb.getAllEmbeddedObjects();
for (HSSFObjectData obj : oleObjects) {
InputStream is = obj.getDirectory().getEntryAsStream(obj.getOLE2ClassName());
FileOutputStream fos = new FileOutputStream(obj.getOLE2FileName());
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = is.read(buffer)) != -1) {
fos.write(buffer, 0, bytesRead);
}
fos.close();
is.close();
}
```
以上代码使用HSSFWorkbook.getAllEmbeddedObjects()方法获取Excel文档中所有的OLE对象,然后遍历列表,使用HSSFObjectData.getDirectory().getEntryAsStream()方法获取每个OLE对象的输入流,并将其写入文件。需要注意的是,HSSFObjectData.getOLE2ClassName()方法返回的是OLE对象的类名,HSSFObjectData.getOLE2FileName()方法返回的是OLE对象的文件名。
阅读全文