【发布时间】:2014-05-06 11:19:36
【问题描述】:
当使用以下代码读取 xls 文件时,我没有得到任何仅包含日期或数字的单元格的内容。带有字符串数据的单元格返回正常。
var fileName = @"F:\excelfiles\3030497Testing.xls";
var connectionString = string.Format("Provider=Microsoft.Jet.OLEDB.4.0; data source={0}; Extended Properties=Excel 8.0;", fileName);
var adapter = new OleDbDataAdapter("SELECT * FROM [mainDetails$]", connectionString);
var ds = new DataSet();
adapter.Fill(ds, "SWinv");
DataTable data = ds.Tables["SWinv"];
foreach( DataRow row in data.Rows)
{
Console.WriteLine(row[3]); // has string data
Console.WriteLine(row[11]); // has non-string data - EMPTY
}
当我用字符串替换列 K (row[11]) 中的数据时,它会输出这些数据。即使我交替行(字符串,非字符串没有),所以精简版本将是:
column 3 | column 11 || output
hello row 1 | 9.5 || hello row 1
hello row 2 | b || hello row 2 b
hello row 3 | 21.1 || hello row 3
此外,当我在调试器中查看数据集时,应该有它们的行上缺少数字,但该行上存在字符串“b”。
谁能指点我正确的方向?
我也尝试过 exceldatareader.codeplex.com,但在数据集中根本没有返回任何数据。
谢谢
【问题讨论】:
-
如果将
;IMEX=1添加到连接字符串中的扩展属性(即Provider=Microsoft.Jet.OLEDB.4.0; data source={0}; Extended Properties=Excel 8.0; IMEX=1),行为有何不同? (此设置强制驱动程序将所有值读取为文本。) -
谢谢,连接字符串现在是: var connectionString = string.Format("Provider=Microsoft.Jet.OLEDB.4.0; data source={0}; Extended Properties=\"Excel 8.0; IMEX=1\"", 文件名);它正在工作