开发者社区 问答 正文

今天十分不顺 使用POI操作excel出现2个十分不解的问题!!!:报错

中午快吃饭了,经理给我2个客户excel的数据,叫我使用POI导出做一些操作并插在数据库

一下午竟然一个都没做完,被说了  平常我是经常使用POI的,都做的很顺溜,但是今天我很纳闷,下面我就来说说问题所在!

第一:明明excel的后缀是xls的,2003版本,纳闷肯定是用HSSFWorkbook等一系列来操作,但是就是报错,非得换成XSSFWorkbook才OK。我还特意看了属性没错啊就是xls。。。。不解。。。

第二:其中一个excel程序还没走到读取的代码呢,直接在创建workbook的地方就停住了,NND,也不报错, 程序就一直在那空跑,好久都没见停,我来回debug好几圈,就是没什么发现,就是不走了。。。尼玛我一下就上火了,这不下班了我还肚子难受。

PS:我在网上说可能不识别,创建workbook要这样:

//创建Workbook
	public  Workbook createWorkbook(InputStream  in) throws  Exception {
	    if (!in.markSupported()) {
	        in = new PushbackInputStream(in, 8);
	        System.out.println(1);
	    }
	    if (POIFSFileSystem.hasPOIFSHeader(in)) {
	    	 System.out.println(2);
	        return new HSSFWorkbook(in);
	    }
	    if (POIXMLDocument.hasOOXMLHeader(in)) {
	    	 System.out.println(3);
	        return new XSSFWorkbook(OPCPackage.open(in));
	    }
	    throw new IllegalArgumentException("你的excel版本目前poi解析不了");
	}



我搬过来,也一样,没效果!


请大家给我看看,谢谢了!

PS:对了,经理说这个excel是从别的系统的接口中生成的,是不是excel生成的就有问题!?

PS:再说一点,我用这个程序测试了类似格式的excel,没问题!就这俩货不行!

展开
收起
kun坤 2020-06-06 16:35:16 1295 分享 版权
1 条回答
写回答
取消 提交回答
  • 多谢大家的回复,已经解决了,我用的是3.9版本的POI

    原来这个文件好像在中间被人为的改过后缀,本来是xlsx的  被谁给改了,讨厌~~

    还有至于为什么程序在那空跑步继续下去,我之前都用的是WPS,打开excel没问题,但是用office打开的话就会提示有损坏!我另存为了一份,就OK了,程序一点问题都没有了顺利的读取!

    PS:office是王道啊!本来我也支持一下WPS的,谁知不给力啊!

    ######

    多看看文档


    ######以后这种模棱两可的话就不要评论了######WorkbookFactory.create######谢谢,已解决,是文件有问题。######POI 好像是有独立于 excel 版本的一套更上层的API。 另外,或许你这个是 csv格式呢。 乱猜的######你直接用kettel处理多好啊 还有就是楼上说的用csv格式 或者是 你看看是不是excel有空的现象 还有你用的包是什么版本 贴出来 和excel贴出来 大家看看
    ###### @80的尾巴 坑爹的问题啊!!! 我以前生成excel的时候也是问题多多 不过都解决了!######谢谢,已解决,是文件有问题啊。######你的POI什么版本,升级下?######我用的3,.9最高的了######
    FileInputStream input = new FileInputStream(new File(excelPath));
    POIFSFileSystem fs = new POIFSFileSystem(input);
    HSSFWorkbook wb = new HSSFWorkbook(fs);

    我的是这样的,上传EXCEL,读取内容。文件是标准的EXCEL 2003

    POI版本是3.7


    ######谢谢,是文件的原因######哈哈,我一看第一次就怀疑是xlsx改过来的。我以前玩过。。。
    2020-06-06 16:35:21
    赞同 展开评论