openxml能用在java里面么
我也遇到了同样的问题.
如果操作xls文件的时候没有问题, 当操作xlsx文件的时候就会报这个错.
我的问题已经解决了.
原因: 主要是因为xls和xlsx的解析方式不一样, 导致使用的类不同.
xls返回的是HSSFWorkbook , 而xlsx返回的是XSSFWorkbook.
我自己试验了一种方法是:
HSSFWorkbook book;
try {
book = new HSSFWorkbook(in);
} catch (Exception ex) {
book = new XSSFWorkbook(in);
}
其结果不尽人意, 而且报错莫名其妙.(反正我是没搞懂).
进入正题: 以下方法是正解,
新建个方法, 返回HSSFWorkbook和XSSFWorkbook所实现的接口
public static Workbook create(InputStream inp) throws IOException,InvalidFormatException {
if (!inp.markSupported()) {
inp = new PushbackInputStream(inp, 8);
}
if (POIFSFileSystem.hasPOIFSHeader(inp)) {
return new HSSFWorkbook(inp);
}
if (POIXMLDocument.hasOOXMLHeader(inp)) {
return new XSSFWorkbook(OPCPackage.open(inp));
}
throw new IllegalArgumentException("你的excel版本目前poi解析不了");
}
2.在new Workbook对象的时候直接调用该静态方法去构造.
Workbook book = XlsImpUtil.create(in);
3. 切记, 如果workbook使用了接口的话, 那么Sheet也一定要用接口, 不要用实现类了.
Sheet sheet = book.getSheetAt(0);
解答完毕. 兄弟给点分吧, 都不容易
广告 您可能关注的内容 |