【问题标题】:c# Reading from xls file - dates and numerics missing from datasetc# 从 xls 文件中读取 - 数据集中缺少日期和数字
【发布时间】: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\"", 文件名);它正在工作

标签: c# excel


【解决方案1】:

如果要将列标题读入结果集中(即使有标题也使用 HDR=NO)并且列数据是数字,请使用 IMEX=1 以避免崩溃。

始终使用 IMEX=1 是检索混合数据列数据的更安全方法。

http://www.connectionstrings.com/excel/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-03
    • 1970-01-01
    • 2014-07-09
    • 1970-01-01
    • 2016-02-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多