我正在从特定的excel工作簿中读取一些值。我将这些值添加到我的数据库中。这个
没有任何问题但我也想将工作簿的表存储到我的数据库BLOB单元格中。
我正在尝试将工作表转换为Byte []。我使用下面的代码。
我正在尝试将表格转换为java.io.File。但我得到以下异常
线程“AWT-EventQueue-0”中的异常java.lang.ClassCastException: org.apache.poi.xssf.usermodel.XSSFSheet无法强制转换为java.io.File
public byte[] convertPDFToByteArray() {
InputStream inputStream = null;
ByteArrayOutputStream baos = new ByteArrayOutputStream();
File file = (File) oku.wb.getSheet("İN");
try {
inputStream = new FileInputStream(file);
byte[] buffer = new byte[1024];
baos = new ByteArrayOutputStream();
int bytesRead;
while ((bytesRead = inputStream.read(buffer)) != -1) {
baos.write(buffer, 0, bytesRead);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (inputStream != null) {
try {
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return baos.toByteArray();
}
有没有办法将 “wb.getSheet(”İN“);” 强制转换为java.io.File或更好的方法?
答案 0 :(得分:2)
你不能只在两个不相关的类之间进行投射。
在您的情况下,我认为您应该使用工作表的getBytes()
,因为工作表对象没有这个:
byte[] buffer = sheet.getWorkbook().getBytes();
您的oku.wb
似乎已包含工作簿,在这种情况下,您可以直接在getBytes()
上致电oku.wb
:
byte[] buffer = oku.wb.getBytes();
编辑 Blast,我从我自己的一个项目中选择了此代码,但使用的是HSSFSheet
而不是XSSFSheet
。因此,您最好的方法是使用评论中概述的工作簿write()
方法:
public byte[] convert(XSSFSheet sheet) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
try {
sheet.getWorkbook().write(baos);
} catch (IOException e) {
// blah
}
return baos.toByteArray();
}