Codeplex Excel数据读取器为Excel 2010提供空数据集

Codeplex Excel数据读取器为Excel 2010提供空数据集

问题描述:

我使用Codeplex Excel Data Reader读取Excel。我面对的问题是它没有任何困难地读取Excel 97-2003文档,但是当使用ExcelReaderFactory.CreateOpenXmlReader(流)读取Excel 207-2010文档时,它输出的是一个空的数据集。有没有人遇到过这个问题。是否有任何解决方案?Codeplex Excel数据读取器为Excel 2010提供空数据集

的读取方法如下

private DataSet ReadExcel(string fileName, string extention) 

{ 

    DataSet dsData = null; 
    FileStream stream = File.Open(fileName, FileMode.Open, FileAccess.Read); 
    IExcelDataReader excelReader = null; 

    try 
    { 

     if (extention.Equals("xls")) 
     { 
      //1. Reading from a binary Excel file ('97-2003 format; *.xls) 
      excelReader = ExcelReaderFactory.CreateBinaryReader(stream); 
     } 
     else 
     { 
      //2. Reading from a OpenXml Excel file (2007 format; *.xlsx) 
      excelReader = ExcelReaderFactory.CreateOpenXmlReader(stream); 
      // excelReader = ExcelReaderFactory.CreateBinaryReader(stream); 
     } 

     excelReader.IsFirstRowAsColumnNames = false; 
     dsData = excelReader.AsDataSet(); 
    } 
    catch (Exception ex) 
    { 
     throw ex; 
    } 
    finally 
    { 
     if (excelReader != null) 
     { 
      excelReader.Close(); 
     } 
    } 
    return dsData; 
} 
+0

上次更新在2009年8月25日,你为什么不只是引用'Microsoft.Office。 Interop.Excel.Application'并读取它的方式? – 2012-08-09 04:23:32

+0

最初我这样做了,但我得到以下错误“消息:Sys.WebForms.PageRequestManagerServerErrorException:检索具有CLSID {00024500-0000-0000-C000-000000000046}的组件的COM类工厂失败,原因如下:8000401a。 ”。它似乎解决了这个问题,至少用户需要登录到服务器来初始化excel服务。但这是不可能的,因为服务器位于服务器场中,并且由于安全问题,客户端不喜欢这样做。 – Thanushka 2012-08-09 04:26:27

8000401a表明它是与Run As Logon Failure

避开server-side automation of office。或者使用XML与服务器上的Excel电子表格配合使用。

按照support issues with the Excel Data Reader

Design and usage are great. So far only issue I've had is with certain XLSX file not parsing correctly (reading in wrong sheets, missind cell values, etc). To resolve these issues, I had to rebuild Excel.dll using latest SharpZipLib from http://www.icsharpcode.net/OpenSource/SharpZipLib/Download.aspx . As others have said, project needs an update, but is still good.

或者只是使用标准的项目建立在微软的方法:

Microsoft.Office.Interop.Excel.Application xlApp; 
Workbook wb = null; 
try 
{ 
wb = xlApp.Workbooks.Open(filePath, false, true,5,null,"WrongPAssword"); 
} 

foreach (object possibleSheet in wb.Sheets) 
    { 
    var aSheet = possibleSheet as Worksheet; 
    if (aSheet != null) 
    { 
....