读取Excel文件的版本
读取xls文件和xlsx文件创建的版本号。
虽然xlsx声明的是向前兼容,但是不知道OleDb是不是也是这样,没有办法所以要读取文件版本,限定只能读取Excel2007保存的文件。
1 using ICSharpCode.SharpZipLib.Zip; 2 3 public const ushort BIFF8 = 0x0600; 4 public const ushort BIFF7 = 0x0500; 5 public static string GetExcelVersion(string fileName) 6 { 7 string version = string.Empty; 8 try 9 { 10 if (Path.GetExtension(fileName) == ".xls") 11 { 12 BinaryReader binReader = new BinaryReader(File.Open(fileName, FileMode.Open)); 13 try 14 { 15 byte[] testArray = new byte[2]; 16 int count = binReader.Read(testArray, 0, 2); 17 18 if (count != 0) 19 { 20 // Reset the position in the stream to zero. 21 binReader.BaseStream.Seek(0, SeekOrigin.Begin); 22 byte[] testArray2 = new byte[512]; 23 int count2 = binReader.Read(testArray2, 0, 512); 24 ushort BOF = binReader.ReadUInt16(); 25 ushort Length = binReader.ReadUInt16(); 26 ushort Version = binReader.ReadUInt16(); 27 ushort file = binReader.ReadUInt16(); 28 if (Version == BIFF8) 29 { 30 version = "Excel8.0"; 31 } 32 if (Version == BIFF7) 33 { 34 version = "Excel8.0"; 35 } 36 } 37 } 38 catch (EndOfStreamException e) 39 { 40 throw e; 41 } 42 finally 43 { 44 binReader.Close(); 45 } 46 } 47 else if (Path.GetExtension(fileName) == ".xlsx") 48 { 49 ZipFile zip = new ZipFile(fileName); 50 try 51 { 52 IEnumerator entries = zip.GetEnumerator(); 53 while (entries.MoveNext()) 54 { 55 ZipEntry current = (ZipEntry)entries.Current; 56 if (current.Name.Equals("docProps/app.xml")) 57 { 58 Stream stream = zip.GetInputStream(current); 59 XPathNavigator navigator = new XPathDocument(stream).CreateNavigator(); 60 XmlNamespaceManager resolver = new XmlNamespaceManager(navigator.NameTable); 61 resolver.AddNamespace("x", "http://schemas.openxmlformats.org/officeDocument/2006/extended-properties"); 62 XPathNodeIterator iterator = navigator.Select("//x:AppVersion", resolver); 63 iterator.MoveNext(); 64 string attribute = iterator.Current.InnerXml; 65 version = attribute; 66 } 67 } 68 } 69 catch (IOException ioEx) 70 { 71 throw ioEx; 72 } 73 finally 74 { 75 if (zip != null) 76 { 77 zip.Close(); 78 } 79 } 80 } 81 } 82 catch (IOException ioEx) 83 { 84 throw ioEx; 85 } 86 87 return version; 88 }
View Code
调用:
1 catch 2 { 3 try 4 { 5 string version = GetExcelVersion(FilePath); 6 string error = string.Empty; 7 if (version == "") 8 { 9 error = "无法识别的Excel文件,请确保文件为有效的Excel2003或者Excel2007格式文件。"; 10 } 11 else if (!version.Contains("12") && !version.Contains("Excel8.0")) 12 { 13 error = string.Format("由高版本的Excel程序创建,请转换为Excel2003或者Excel2007格式文件", version); 14 } 15 throw new InvalidDataException(error); 16 } 17 catch (IOException ioEx) 18 { 19 throw ioEx; 20 } 21 }
View Code
转载于:https://www.cnblogs.com/yhlx125/p/3665951.html
读取Excel文件的版本相关推荐
- 阿里的Easyexcel读取Excel文件(最新版本)
本篇文章主要介绍一下使用阿里开源的Easyexcel工具处理读取excel文件,因为之前自己想在网上找一下这个简单的立即上手的博客,发现很多文章的教程都针对比较旧的版本的Easyexcel,没有使 ...
- matlab显示服务器出现意外,Matlab 读取excel文件提示服务器出现意外情况或无法读取问题解决...
1.问题描述: 该错误通常发生在应用函数读取excel文件(后缀xls或xlsx)时. 应用xlsread函数读取提示服务器出现意外情况: 应用importdata读取时提示can't open fi ...
- form表单提交,Servlet接收并读取Excel文件
首先是jsp页面: <body scroll=no style="overflow-y:hidden;" onselectstart="return false&q ...
- 读取EXCEL文件内容
2019独角兽企业重金招聘Python工程师标准>>> package org.bigdata.framework.admin.web.util;import java.io.Fil ...
- php读取excel文件_php读取EXCEL文件 php excelreader读取excel文件
php开发中肯定会遇到将excel文件内容导入到数据库的需要,php-excel-reader是一个读取excel的类,可以很轻松的使用它读取excel文件非常方便. 我下载的是php-excel-r ...
- 读取Excel文件数据
1.用APP直接读取Excel文件 这种方法原理是用APP打开EXCEL文件,操作单元格读取数据,快速比较慢,基本不采用这种方式. 2.用APP把Excel文件转成Txt文件,再读取Txt文件 过程 ...
- asp.net 读取excel文件的一些方法,NPOI方法
第一种:传统方法,采用OleDB读取EXCEL文件, 优点,写法简单,老式.缺点 :服务器必须有安装此组建,而且版本必须兼容,否则读取报错,不推荐使用. private DataSet GetConn ...
- js 读取excel 导入mysql_可以读取EXCEL文件的js代码
首页给个有中文说明的例子,下面的例子很多大家可以多测试. function readExcel() { var excelApp; var excelWorkBook; var excelSheet; ...
- python 读excel中的sheet_python读取excel文件中所有sheet表格
sales: store: """ (1)用load_workbook函数打开excel文件,返回一个工作簿对象 (2)用工作簿对象获取所有的sheet (3)第一个fo ...
最新文章
- 全球Top5互联网巨头崛起秘诀,真相竟然是?
- svm学习之线性部分总结
- YFIOServer 后台IO接口使用说明
- 漫谈数据仓库之维度建模
- react native一键分享功能实现amp;原理和注意点(支持微信、qq、新浪微博等)
- 微博超话签到小工具v2.0 签到管理操作
- Windows组建网络服务 ——DNS的组建与架构
- Linux 环境变量配置全攻略
- 48. PHP 页面静态化(1)
- 三级联动下拉列表的开发过程与范例
- 一个正经的前端学习 开源 仓库(阶段二十一)
- JAVA_判断日期是否为工作日(排除节假日和调整周末上班)
- 网站打不开如何解决?教你4个方法搞定它!
- AcWing 导弹防御系统 Python代码
- Docker Swarm 练习:投票 App
- cad审图软件lisp_CAD审图标记最新版
- Android 通知屏幕亮起
- nginx高效学习方法
- Remix-IDE安装开发环境与使用文档(Windows环境)
- 软件开发团队必备管理工具