读取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文件的版本相关推荐

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

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

  2. matlab显示服务器出现意外,Matlab 读取excel文件提示服务器出现意外情况或无法读取问题解决...

    1.问题描述: 该错误通常发生在应用函数读取excel文件(后缀xls或xlsx)时. 应用xlsread函数读取提示服务器出现意外情况: 应用importdata读取时提示can't open fi ...

  3. form表单提交,Servlet接收并读取Excel文件

    首先是jsp页面: <body scroll=no style="overflow-y:hidden;" onselectstart="return false&q ...

  4. 读取EXCEL文件内容

    2019独角兽企业重金招聘Python工程师标准>>> package org.bigdata.framework.admin.web.util;import java.io.Fil ...

  5. php读取excel文件_php读取EXCEL文件 php excelreader读取excel文件

    php开发中肯定会遇到将excel文件内容导入到数据库的需要,php-excel-reader是一个读取excel的类,可以很轻松的使用它读取excel文件非常方便. 我下载的是php-excel-r ...

  6. 读取Excel文件数据

    1.用APP直接读取Excel文件 这种方法原理是用APP打开EXCEL文件,操作单元格读取数据,快速比较慢,基本不采用这种方式. 2.用APP把Excel文件转成Txt文件,再读取Txt文件  过程 ...

  7. asp.net 读取excel文件的一些方法,NPOI方法

    第一种:传统方法,采用OleDB读取EXCEL文件, 优点,写法简单,老式.缺点 :服务器必须有安装此组建,而且版本必须兼容,否则读取报错,不推荐使用. private DataSet GetConn ...

  8. js 读取excel 导入mysql_可以读取EXCEL文件的js代码

    首页给个有中文说明的例子,下面的例子很多大家可以多测试. function readExcel() { var excelApp; var excelWorkBook; var excelSheet; ...

  9. python 读excel中的sheet_python读取excel文件中所有sheet表格

    sales: store: """ (1)用load_workbook函数打开excel文件,返回一个工作簿对象 (2)用工作簿对象获取所有的sheet (3)第一个fo ...

最新文章

  1. 全球Top5互联网巨头崛起秘诀,真相竟然是?
  2. svm学习之线性部分总结
  3. YFIOServer 后台IO接口使用说明
  4. 漫谈数据仓库之维度建模
  5. react native一键分享功能实现amp;原理和注意点(支持微信、qq、新浪微博等)
  6. 微博超话签到小工具v2.0 签到管理操作
  7. Windows组建网络服务 ——DNS的组建与架构
  8. Linux 环境变量配置全攻略
  9. 48. PHP 页面静态化(1)
  10. 三级联动下拉列表的开发过程与范例
  11. 一个正经的前端学习 开源 仓库(阶段二十一)
  12. JAVA_判断日期是否为工作日(排除节假日和调整周末上班)
  13. 网站打不开如何解决?教你4个方法搞定它!
  14. AcWing 导弹防御系统 Python代码
  15. Docker Swarm 练习:投票 App
  16. cad审图软件lisp_CAD审图标记最新版
  17. Android 通知屏幕亮起
  18. nginx高效学习方法
  19. Remix-IDE安装开发环境与使用文档(Windows环境)
  20. 软件开发团队必备管理工具

热门文章

  1. 春节前后,太原将举办多种展览演出
  2. 快速集成二维码扫描,使用最新版本的zxing(2017.11.10抽取zxing代码)
  3. 你真的懂病毒式营销吗
  4. TOJ 4008 The Leaf Eaters
  5. Q103:磨边的物体(Beveled Objects)
  6. 爬虫项目——BS4练手(1)
  7. 为什么大数据分析很重要
  8. 大数据分析需注意什么问题
  9. 《python自动化》学习笔记:电话地址和E-mail地址提取程序
  10. c语言结构体多次调用错误,C语言在使用中遇到了一个结构体赋值失败的问题?...