读取Excel文件的版本
读取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文件的版本的更多相关文章
- 阿里的Easyexcel读取Excel文件(最新版本)
本篇文章主要介绍一下使用阿里开源的Easyexcel工具处理读取excel文件,因为之前自己想在网上找一下这个简单的立即上手的博客,发现很多文章的教程都针对比较旧的版本的Easyexcel,没有使 ...
- ADO.NET 读取Excel文件,并作数据源
项目中需要用的功能,贴上代码了. 需要注意的地方:配置Web.config的时候要注意版本问题! //若是在Web.config中配置数据源,如下 <add key="ExcelCon ...
- PHPExcel读取Excel文件的实现代码
<?php require_once 'PHPExcel.php'; /**对excel里的日期进行格式转化*/ function GetData($val){ $jd = GregorianT ...
- .Net读取Excel文件时丢失数据的问题 (转载)
相信很多人都试过通过OleDB读取Excel文件,这种方法效率十分高,只是有一点会让人十分头痛,就是当一列中既有混合型数据,又有纯数据时,往往容易丢失数据. 百度过后,改连接字符串 “HDR=YES; ...
- C# conn.open() 外部表不是预期的格式( 读取EXCEL文件出错)
环境:win7+iis7+Office2007 在asp.net网站中导出Excel文件后,再把文件导入到数据库中. 读取Excel文件时,打开连接出错. 错误为:外部表不是预期的格式 解决:检查了一 ...
- (实用篇)PHPExcel读取Excel文件的实现代码
用PHPExcel读取Excel 2007 或者Excel2003文件,需要的朋友,可以参考下. 涉及知识点: php对excel文件进行循环读取 php对字符进行ascii编码转化,将字符转为十进 ...
- 读取Excel文件的两种方法
第一种方法:传统方法,采用OleDB读取EXCEL文件, 优点:写法简单,缺点:服务器必须安有此组件才能用,不推荐使用 private DataSet GetConnect_DataSet2(stri ...
- python下读取excel文件
项目中要用到这个,所以记录一下. python下读取excel文件方法多种,用的是普通的xlrd插件,因为它各种版本的excel文件都可读. 首先在https://pypi.python.org/py ...
- jspsmart(保存文件)+poi(读取excel文件)操作excel文件
写在前面: 项目环境:jdk1.4+weblogic 需求:能上传excel2003+2007 由于项目不仅需要上传excel2003,还要上传excel2007,故我们抛弃了jxl(只能上传exce ...
随机推荐
- .NET开发问题汇总
问题一: mvc 部署到iis 提示错误未能加载文件或程序集System.Web.Http.WebHost 解决方案: Nuget程序包管理 —>程序包管理控制台,运行以下命令即可:Update ...
- Ubuntu 开启 Crontab 计划任务日志
Ubuntu 下的 Crontab 日志功能不是自动开启的.开启日志功能的步骤是: ① 修改 rsyslog sudo vim /etc/rsyslog.d/-default.conf 找到: #cr ...
- linux下创建和删除软、硬链接
linux下创建和删除软.硬链接 在Linux系统中,内核为每一个新创建的文件分配一个Inode(索引结点),每个文件都有一个惟一的inode号.文件属性保存在索引结点里,在访问文件时,索引结点被复制 ...
- 云计算中心网络资源分配-Faircloud: sharing the network in cloud computing
网络资源同计算资源以及存储资源一样,是一种可被租户共享使用并提高利用率的资源.但是,不同租户的计算资源以及存储资源之间,有很强的隔离性,可以实现按需按比例分配的使用方式,但是网络资源却不可以. 主要原 ...
- Solr定时更新
今天用到solr定时重建索引和增量更新技术,就从网上搜了一些资料,在这里给大家整理了一下,也经过了自己的测试,没有异常. Solr官方提供了很强大的Data Import Request Handle ...
- MVC 扩展方法特点
.NET MVC 3中扩展方法特点: (1)扩展类的名称以Extensions结尾: (2)扩展类的类型是static: (3)扩展方法至少有一个参数,第一个参数必须指定该方法作用于哪个类型,并且该参 ...
- Keepalived安装及初步使用
一.基本规划VIP:192.168.1.11Master:192.168.1.105Backup:192.168.1.102二.安装主备分别安装keepalivedyum -y install kee ...
- 大话数据结构(十一)java程序——串
1.串的定义 串(String):是由零个或多个字符组成的有限序列,又名为字符串. 一般记为s="a1a2a3.........an"(n>=0),其中,s是串名称,用双引号 ...
- von Neumann architecture
COMPUTER ORGANIZATION AND ARCHITECTURE DESIGNING FOR PERFORMANCE NINTH EDITION 3.1 COMPUTER COMPONEN ...
- access violation at address General protection fault
https://en.wikipedia.org/wiki/General_protection_fault In memory errors, the faulting program access ...