读取xls文件和xlsx文件创建的版本号。

虽然xlsx声明的是向前兼容,但是不知道OleDb是不是也是这样,没有办法所以要读取文件版本,限定只能读取Excel2007保存的文件。

 using ICSharpCode.SharpZipLib.Zip;

 public const ushort BIFF8 = 0x0600;
public const ushort BIFF7 = 0x0500;
public static string GetExcelVersion(string fileName)
{
string version = string.Empty;
try
{
if (Path.GetExtension(fileName) == ".xls")
{
BinaryReader binReader = new BinaryReader(File.Open(fileName, FileMode.Open));
try
{
byte[] testArray = new byte[];
int count = binReader.Read(testArray, , ); if (count != )
{
// Reset the position in the stream to zero.
binReader.BaseStream.Seek(, SeekOrigin.Begin);
byte[] testArray2 = new byte[];
int count2 = binReader.Read(testArray2, , );
ushort BOF = binReader.ReadUInt16();
ushort Length = binReader.ReadUInt16();
ushort Version = binReader.ReadUInt16();
ushort file = binReader.ReadUInt16();
if (Version == BIFF8)
{
version = "Excel8.0";
}
if (Version == BIFF7)
{
version = "Excel8.0";
}
}
}
catch (EndOfStreamException e)
{
throw e;
}
finally
{
binReader.Close();
}
}
else if (Path.GetExtension(fileName) == ".xlsx")
{
ZipFile zip = new ZipFile(fileName);
try
{
IEnumerator entries = zip.GetEnumerator();
while (entries.MoveNext())
{
ZipEntry current = (ZipEntry)entries.Current;
if (current.Name.Equals("docProps/app.xml"))
{
Stream stream = zip.GetInputStream(current);
XPathNavigator navigator = new XPathDocument(stream).CreateNavigator();
XmlNamespaceManager resolver = new XmlNamespaceManager(navigator.NameTable);
resolver.AddNamespace("x", "http://schemas.openxmlformats.org/officeDocument/2006/extended-properties");
XPathNodeIterator iterator = navigator.Select("//x:AppVersion", resolver);
iterator.MoveNext();
string attribute = iterator.Current.InnerXml;
version = attribute;
}
}
}
catch (IOException ioEx)
{
throw ioEx;
}
finally
{
if (zip != null)
{
zip.Close();
}
}
}
}
catch (IOException ioEx)
{
throw ioEx;
} return version;
}

调用:

   catch
{
try
{
string version = GetExcelVersion(FilePath);
string error = string.Empty;
if (version == "")
{
error = "无法识别的Excel文件,请确保文件为有效的Excel2003或者Excel2007格式文件。";
}
else if (!version.Contains("") && !version.Contains("Excel8.0"))
{
error = string.Format("由高版本的Excel程序创建,请转换为Excel2003或者Excel2007格式文件", version);
}
throw new InvalidDataException(error);
}
catch (IOException ioEx)
{
throw ioEx;
}
}

读取Excel文件的版本的更多相关文章

  1. 阿里的Easyexcel读取Excel文件(最新版本)

      本篇文章主要介绍一下使用阿里开源的Easyexcel工具处理读取excel文件,因为之前自己想在网上找一下这个简单的立即上手的博客,发现很多文章的教程都针对比较旧的版本的Easyexcel,没有使 ...

  2. ADO.NET 读取Excel文件,并作数据源

    项目中需要用的功能,贴上代码了. 需要注意的地方:配置Web.config的时候要注意版本问题! //若是在Web.config中配置数据源,如下 <add key="ExcelCon ...

  3. PHPExcel读取Excel文件的实现代码

    <?php require_once 'PHPExcel.php'; /**对excel里的日期进行格式转化*/ function GetData($val){ $jd = GregorianT ...

  4. .Net读取Excel文件时丢失数据的问题 (转载)

    相信很多人都试过通过OleDB读取Excel文件,这种方法效率十分高,只是有一点会让人十分头痛,就是当一列中既有混合型数据,又有纯数据时,往往容易丢失数据. 百度过后,改连接字符串 “HDR=YES; ...

  5. C# conn.open() 外部表不是预期的格式( 读取EXCEL文件出错)

    环境:win7+iis7+Office2007 在asp.net网站中导出Excel文件后,再把文件导入到数据库中. 读取Excel文件时,打开连接出错. 错误为:外部表不是预期的格式 解决:检查了一 ...

  6. (实用篇)PHPExcel读取Excel文件的实现代码

    用PHPExcel读取Excel 2007 或者Excel2003文件,需要的朋友,可以参考下. 涉及知识点:  php对excel文件进行循环读取 php对字符进行ascii编码转化,将字符转为十进 ...

  7. 读取Excel文件的两种方法

    第一种方法:传统方法,采用OleDB读取EXCEL文件, 优点:写法简单,缺点:服务器必须安有此组件才能用,不推荐使用 private DataSet GetConnect_DataSet2(stri ...

  8. python下读取excel文件

    项目中要用到这个,所以记录一下. python下读取excel文件方法多种,用的是普通的xlrd插件,因为它各种版本的excel文件都可读. 首先在https://pypi.python.org/py ...

  9. jspsmart(保存文件)+poi(读取excel文件)操作excel文件

    写在前面: 项目环境:jdk1.4+weblogic 需求:能上传excel2003+2007 由于项目不仅需要上传excel2003,还要上传excel2007,故我们抛弃了jxl(只能上传exce ...

随机推荐

  1. Maven问题总结:could not resolve archetype xxxxxxx from any of the configured repositories

    错误提示 Eclipse中通过Archetype创建Maven项目时报错:Could not resolve archetype xxxxxxx from any of the configured ...

  2. Web 在线文件管理器学习笔记与总结(7)重命名文件

    rename($oldname,$newname) 重命名文件或目录 <<<EOF EOF; 使用heredoc 技术,来部分实现界面与代码的准分离 重命名时,需要验证新文件名的合法 ...

  3. [ PHP+jQuery ] ajax 多级联动菜单的应用:电商网站的用户地址选择功能 ( 二 ) - 仿亚马逊下拉面板

    /** jQuery version: 1.8.3 Author: 小dee Date: 2014.11.8 */ 接上一篇博客. 实现带缓存的仿亚马逊下拉面板 效果图: 图1 初始 图2 点击省份 ...

  4. Ubuntu中搭建Nginx+PHP环境最简单的方法

    先安装: sudo apt-get install nginx php5-fpm 然后编辑配置文件: sudo gedit /etc/nginx/site-available/default 找到lo ...

  5. 推荐!国外程序员整理的 PHP 资源大全

    推荐!国外程序员整理的 PHP 资源大全 2014/08/02 · PHP, 工具与资源 · 8.5K 阅读 · 1 评论· php 分享到:0 与<YII框架>不得不说的故事—安全篇 R ...

  6. NEC学习 ---- 布局 -两列, 左侧定宽,右侧自适应

    CSS代码:以下两处代码是NEC中CSS初始化样式和功能性样式.今后的NEC研究中,默认这两处是引用的. /* 这是CSS reset 代码 --- 初始化样式 */ /* reset */ html ...

  7. Jquery scrollTop animate 實現動態滾動到頁面頂部

    這個方法之前都是用的錨點實現的,但是效果僵硬,動感不足! 之後參考了一些網站,發現都是用的js,於是自己想到用jquery 來做一個插件也來實現以下這個小功能. $.fn.backTop = func ...

  8. ease of rerouting traffic in IP networks without readdressing every host

    https://en.wikipedia.org/wiki/Network_address_translation In the face of the foreseeable global IP a ...

  9. php安装,mysql安装

    先安装mysql 下载地址:http://dev.mysql.com/downloads/mysql/5.6.html#downloads 选择“Source Code”,用已经注册好的oracle账 ...

  10. 使用SecureCRT连接ubuntu

    SecureCRT SSH2连接新装的UBUNTU 14.04 LTS 发现UBUNTU默认没有安装SSH 服务 在UBUNTU上 sudo apt-get install openssh-serve ...