为什么OleDB忽略Excel单元格?

这是设置:

我有一个非常简单的页面的Excel电子表格。 它看起来像这样: 图片编辑,当然

我使用下面的连接string来访问这个文件:

string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=\"Excel 8.0;HDR=NO\";", fn) 

我访问该文件的function如下所示:

 try { string select = string.Format("SELECT * FROM [{0}$]", tab.PageName); OleDbDataAdapter adapter = new OleDbDataAdapter(select, con); DataSet ds = new DataSet(); adapter.Fill(ds, tab.PageName); // DEBUG: Let's just see what it is getting... for (int x = 0; x < 13; x++) { for (int y = 0; y < 3; y++) { Console.Write(ds.Tables[0].Rows[x][y].ToString() + "\t"); } Console.WriteLine(""); } } catch { ... } 

为什么代码不能读取一些单元格? 请注意,在C5处有文字“利润”。 我可以把B5看成是“收入”。 我可以读C6作为一个整数值。 但利润似乎消失了。

标题信息并不是一个很大的问题,但是真正的数据块却被拒绝读取。 相反,即使单元格包含真实,有效的可用数据,它也会返回DBNull。 单元格的格式完全可以在可读的单元格和返回DBNull的单元格之间完全相同。

我真的很难过!

有什么想法吗?

  new OleDbConnection("...TypeGuessRows=0;ImportMixedTypes=Text"); 

我有一个预感,你可能正在经历一个我以前的问题 。

尝试将这些参数添加到您的连接string。

我无法获得其他答案+评论的工作。 所需的唯一设置是IMEX=1但它必须嵌套在扩展属性中的单引号中,所以下面是如何格式化其他IMEX设置的示例:

 connection.ConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\somepath\somefile.xls;Extended Properties='Excel 8.0;IMEX=1';";