在C#中的Excel文件中读取问题

我正在使用此代码阅读OLDB连接的Excel文件

var connectionString = string.Format("Provider=Microsoft.Jet.OLEDB.4.0; data source={0}; Extended Properties=Excel 8.0;", fileName); var fileName = string.Format("{0}\\s23.xls", Directory.GetCurrentDirectory()); var adapter = new OleDbDataAdapter("SELECT * FROM [TEJ3$] ", connectionString); DataTable dt=new DataTable(); adapter.Fill(dt, "Table1"); 

并运行此代码后,我的数据表被填充。 但是我有一个有很多string单元格和很less空单元格的列; 在Excel文件中,这个单元格有数字值。

有人有一个想法?

检查第一个例子: http : //www.connectionstrings.com/excel

经常出现错误的是,Excel将根据前X行估计列的types。 在此之后的值不匹配时,这些行将获得空值。 恐怕进入registry有时是让Excel驱动程序首先扫描所有行(如connectionstrings.com文章中所述)的唯一方法。

在您的环境中使用HDR和IMEX设置。 在某些情况下,这也会有所帮助。

我有这个确切的问题,并使用IMEX设置解决它。 如果其他人想知道如何包含IMEX,这里是我的连接string

 string connectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties='Excel 8.0;IMEX=1';Data Source={0};"; connectionString = string.Format(connectionString, excelWorkbookPath); 

SpreadsheetGear for .NET将允许您从C#中加载Excel工作簿,并以任何顺序访问基础单元格值或格式化值,而不pipe工作簿的布局如何或单元格的types如何。

你可以在这里看到活的ASP.NET示例,如果你想自己试试,可以在这里下载免费试用版。

免责声明:我自己的SpreadsheetGear LLC

只要确保你的Excel文件没有打开。 closures你的Excel应用程序,然后开始你的程序。

苏尼尔