鉴定Excel格式是否是2003或2007,如果你的做法是读取扩展名,那说明你还是一个菜鸟!因为后缀完全是我们可以随意更改,我们可以把xls改成xlsx,甚至是txt,exe,jpg的后缀改成xlsx。

不过不管扩展名如何改变,文件的字节是改不了的,所以一般鉴定文件的真正格式应该读取byte,一般前几个字节都决定了文件的格式,这个是改不了的

读取Excel格式用不着如此麻烦了,我们完全可以借助POI提供的功能去鉴定。POI的Workbook提供了两个实现类,HSSFWorkbook(处理2003)和XSSFWorkbook(处理2007)

代码如下:



public static boolean isExcel2003(InputStream is) {        try {         new HSSFWorkbook(is);     } catch (Exception e) {           return false;     }     return true;  }

public static boolean isExcel2007(InputStream is) {        try {         new XSSFWorkbook( is);        } catch (Exception e) {           return false;     }     return true;  }

调用

public static void main(String[] args) throws IOException {      String path ="C:\\Users\\QUINN\\Desktop\\template\\0.xlsx";        File file = new File(path);      InputStream is = new FileInputStream(file);      System.out.println(FileHelper.isExcel2003(is));       System.out.println(FileHelper.isExcel2007(is));   }

以上调用的方法是错误的,如果文件真的是2007,则会两个都返回false,原因后面再说,先看看正确的写法。

public static void main(String[] args) throws IOException {      String path ="C:\\Users\\QUINN\\Desktop\\template\\0.xlsx";        File file = new File(path);      System.out.println(FileHelper.isExcel2003(new FileInputStream(file)));        System.out.println(FileHelper.isExcel2007(new FileInputStream(file)));    }

后面这个才是正确的方式,前面的之所以不成功,那是因为在执行第一个方法isExcel2003的时候new了一个workbook,workbooknew完之后在POIFSFileSystem会有一个关闭流的操作,如图

[img]http://dl2.iteye.com/upload/attachment/0097/8182/b0be4f8b-b640-3f8f-a9f5-73adbd47589b.jpg[/img]

当执行到isExcel2007的时候还是那个InputStream对象,但是对象已经在isExcel2003的方法里被close了,所以在后面的方法里始终是报错的。

POI检查EXCEL版本(2003或2007)相关推荐

  1. java用poi操作excel,2003,2007,2010

    原文: [url]http://happyqing.iteye.com/blog/1965570[/url] [color=red]通过POI统一读取Excel文件[/color](兼容97-2003 ...

  2. Java面试poi中excel版本大小_java 中 poi解析Excel文件版本问题解决办法

    java 中 poi解析Excel文件版本问题解决办法 发布时间:2020-10-02 03:46:15 来源:脚本之家 阅读:91 作者:程诺 poi解析Excel文件版本问题解决办法 poi解析E ...

  3. springboot+poi支持excel版本问题

    在java开发中操作excel的传统组件poi如何支持xls.xlsx? poi是apache下的一个开源项目,对公式支持较好,支持压缩excel.基本原理就是将excel表格数据读取出来组成一个li ...

  4. 如何判断excel是2003还是2007版本

    InputStream inp = xxx; if(! inp.markSupported()) { inp = new PushbackInputStream(inp, 8); } if(POIFS ...

  5. Java实现excel 2003、2007导入功能

    Java实现excel2003.2007导入功能完整版demo, 内置sql文件: https://gitee.com/PanGuanQing/excel-import-demo.git 1.要导入的 ...

  6. java POI创建Excel示例(xslx和xsl区别 )

    Java用来处理office类库有很多,其中POI就是比较出名的一个,它是apache的类库,现在版本到了3.10,也就是2014年2月8号这个版本. 在处理PPT,Excel和Word前,需要导入以 ...

  7. Java 常用的工具类—判断Excel版本读取Excel/CSV文件

    以下内容均来自实际项目需求,记录下,网上找的读取Excel会出现不少问题,下面代码是经过好多次测试改进的符合现在项目的代码,如有不同要求,请自行修改,代码均只去掉了包名. 注:我们的Excel 第一行 ...

  8. java使用POI操作excel

    学习目标: 在java掌握poi,操作excel或者是word 文章目录 学习目标: 一.POI 是什么? 二.Excel包名称说明 二.使用步骤 1.引入库 2.使用方式 基础流程 设置单元格(ce ...

  9. java读取sheet2_java读取Excel指定sheet页或全部sheet页数据(含2003和2007版本)

    java读取Excel指定sheet页或全部sheet页数据(含2003和2007版本) 在http://download.csdn.net/detail/u010792467/8072015下载所需 ...

最新文章

  1. 短序比对工具 bowtie vs BWA vs Subread vs SOAP vs NovoAlign
  2. macOS Sierra 10.12虚拟机安装
  3. python经典排序_python实现十大经典排序算法
  4. Git 分支 - 分支的新建
  5. r语言8c多字节字符串有错,R 学习笔记《十》 R语言初学者指南--图形工具
  6. c语言中x%y什么意思,c语言里%是什么意思?
  7. 山东大学研究生计算机学院导师,山东大学计算机科学与技术学院研究生导师简介-杨义军...
  8. macOS Monterey 12.3 (21E230) 正式版 ISO、IPSW、PKG 下载
  9. 小程序源码:修复图片音频全新升级带特效喝酒神器小游戏微信小程序
  10. 精彩回顾|展会圆满收官,落幕不散场,期待与您的再次相遇,下一站上海!
  11. 360手机卫士企业版下载
  12. thinkphp用phpqrcode生成二维码(含中间带logo、临时二维码)或生成微信二维码海报的方法
  13. linux centos用smartctl 打开硬盘写缓存
  14. python能做界面吗_如何使用pyQT做pythonGUI界面|
  15. 爬虫----爬虫基本原理
  16. MySQL数据备份、恢复
  17. 成了精的太师椅·自由之翼·八
  18. VINS_FUSION
  19. elasticsearch 深入 —— 结构化搜索
  20. mysql数据库表分区

热门文章

  1. 张雨潇 计算机科学,三亚考生本科第二批录取名单[一]
  2. 郭平欣老先生在恢复中
  3. 一个华为人19年的工作体会:一颗电容会造成数亿损失[转]
  4. 冷却水的循环方式有哪几种_循环水处理设备冷却系统分为哪些
  5. 服务器响应到客户端中文乱码的解决方式
  6. 关于Network ACLs的理解
  7. MP FILTRI FMP0394BAA6M25NP01
  8. 51单片机实验(LED and KEY)
  9. 外汇交易中正确的策略是什么标准呢?ForexClub相信要做到这5点
  10. 安卓期末大作业——售票APP源码和设计报告