openxml能用在java里面么

 我来答
我们一起跑5180
2017-08-04 · TA获得超过1559个赞
知道小有建树答主
回答量:2302
采纳率:0%
帮助的人:624万
展开全部

我也遇到了同样的问题.

如果操作xls文件的时候没有问题, 当操作xlsx文件的时候就会报这个错. 


我的问题已经解决了. 

原因: 主要是因为xls和xlsx的解析方式不一样, 导致使用的类不同. 

xls返回的是HSSFWorkbook   , 而xlsx返回的是XSSFWorkbook. 

我自己试验了一种方法是:

HSSFWorkbook book;

try {

book = new HSSFWorkbook(in);

} catch (Exception ex) {

book = new XSSFWorkbook(in);

}

其结果不尽人意, 而且报错莫名其妙.(反正我是没搞懂). 


进入正题: 以下方法是正解, 

  1. 新建个方法, 返回HSSFWorkbook和XSSFWorkbook所实现的接口

  2. public static Workbook create(InputStream inp) throws IOException,InvalidFormatException {

  3. if (!inp.markSupported()) {

  4. inp = new PushbackInputStream(inp, 8);

  5. }

  6. if (POIFSFileSystem.hasPOIFSHeader(inp)) {

  7. return new HSSFWorkbook(inp);

  8. }

  9. if (POIXMLDocument.hasOOXMLHeader(inp)) {

  10. return new XSSFWorkbook(OPCPackage.open(inp));

  11. }

  12. throw new IllegalArgumentException("你的excel版本目前poi解析不了");

  13. }

2.在new Workbook对象的时候直接调用该静态方法去构造.

Workbook book = XlsImpUtil.create(in);

3. 切记, 如果workbook使用了接口的话, 那么Sheet也一定要用接口, 不要用实现类了.

Sheet sheet = book.getSheetAt(0);


解答完毕. 兄弟给点分吧, 都不容易

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式