POI检查EXCEL版本(2003或2007)
鉴定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)相关推荐
- java用poi操作excel,2003,2007,2010
原文: [url]http://happyqing.iteye.com/blog/1965570[/url] [color=red]通过POI统一读取Excel文件[/color](兼容97-2003 ...
- Java面试poi中excel版本大小_java 中 poi解析Excel文件版本问题解决办法
java 中 poi解析Excel文件版本问题解决办法 发布时间:2020-10-02 03:46:15 来源:脚本之家 阅读:91 作者:程诺 poi解析Excel文件版本问题解决办法 poi解析E ...
- springboot+poi支持excel版本问题
在java开发中操作excel的传统组件poi如何支持xls.xlsx? poi是apache下的一个开源项目,对公式支持较好,支持压缩excel.基本原理就是将excel表格数据读取出来组成一个li ...
- 如何判断excel是2003还是2007版本
InputStream inp = xxx; if(! inp.markSupported()) { inp = new PushbackInputStream(inp, 8); } if(POIFS ...
- Java实现excel 2003、2007导入功能
Java实现excel2003.2007导入功能完整版demo, 内置sql文件: https://gitee.com/PanGuanQing/excel-import-demo.git 1.要导入的 ...
- java POI创建Excel示例(xslx和xsl区别 )
Java用来处理office类库有很多,其中POI就是比较出名的一个,它是apache的类库,现在版本到了3.10,也就是2014年2月8号这个版本. 在处理PPT,Excel和Word前,需要导入以 ...
- Java 常用的工具类—判断Excel版本读取Excel/CSV文件
以下内容均来自实际项目需求,记录下,网上找的读取Excel会出现不少问题,下面代码是经过好多次测试改进的符合现在项目的代码,如有不同要求,请自行修改,代码均只去掉了包名. 注:我们的Excel 第一行 ...
- java使用POI操作excel
学习目标: 在java掌握poi,操作excel或者是word 文章目录 学习目标: 一.POI 是什么? 二.Excel包名称说明 二.使用步骤 1.引入库 2.使用方式 基础流程 设置单元格(ce ...
- java读取sheet2_java读取Excel指定sheet页或全部sheet页数据(含2003和2007版本)
java读取Excel指定sheet页或全部sheet页数据(含2003和2007版本) 在http://download.csdn.net/detail/u010792467/8072015下载所需 ...
最新文章
- 短序比对工具 bowtie vs BWA vs Subread vs SOAP vs NovoAlign
- macOS Sierra 10.12虚拟机安装
- python经典排序_python实现十大经典排序算法
- Git 分支 - 分支的新建
- r语言8c多字节字符串有错,R 学习笔记《十》 R语言初学者指南--图形工具
- c语言中x%y什么意思,c语言里%是什么意思?
- 山东大学研究生计算机学院导师,山东大学计算机科学与技术学院研究生导师简介-杨义军...
- macOS Monterey 12.3 (21E230) 正式版 ISO、IPSW、PKG 下载
- 小程序源码:修复图片音频全新升级带特效喝酒神器小游戏微信小程序
- 精彩回顾|展会圆满收官,落幕不散场,期待与您的再次相遇,下一站上海!
- 360手机卫士企业版下载
- thinkphp用phpqrcode生成二维码(含中间带logo、临时二维码)或生成微信二维码海报的方法
- linux centos用smartctl 打开硬盘写缓存
- python能做界面吗_如何使用pyQT做pythonGUI界面|
- 爬虫----爬虫基本原理
- MySQL数据备份、恢复
- 成了精的太师椅·自由之翼·八
- VINS_FUSION
- elasticsearch 深入 —— 结构化搜索
- mysql数据库表分区