zoukankan      html  css  js  c++  java
  • 读取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
  • 相关阅读:
    【sqli-labs】 less26 GET- Error based -All you SPACES and COMMENTS belong to us(GET型基于错误的去除了空格和注释的注入)
    【sqli-labs】 less25a GET- Blind based -All you OR&AND belong to us -Intiger based(GET型基于盲注的去除了or和and的整型注入)
    【sqli-labs】 less25 GET- Error based -All you OR&AND belong to us -string single quote(GET型基于错误的去除了or和and的单引号注入)
    Apache rewrite地址重写
    PHP安装-phpMyAdmin+Discuz
    SElinux解决web网站无法访问
    Squid代理服务部署
    Apache动态加载模块
    Apache虚拟主机+AD压力测试
    nginx php-fpm conf文件编写
  • 原文地址:https://www.cnblogs.com/yhlx125/p/3665951.html
Copyright © 2011-2022 走看看