从Excel导入的Datarow不返回任何值,如果数据有' /'在其中

时间:2017-05-09 03:50:12

标签: c# excel

我正在尝试使用C#从Excel工作表中读取数据。但是在我正在阅读的一些专栏中有' /'在数据中。例如:123456/987654。 我就是这样,我只是得到空间。就像这样的表格:

111111
222222个
九十八万七千六百五十四分之一十二万三千四百五十六
333333个

我得到的结果如下:
111111个
222222个

333333个

您能告诉我这个问题/解决方法吗?

    var fileName = string.Format("{0}\\ReleaseNoteValidation\\release notes.xlsx", Directory.GetCurrentDirectory());

    string connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + fileName + ";Extended Properties=Excel 12.0;";

    var adapter = new OleDbDataAdapter("SELECT * FROM [Latest fixes$]", connectionString);
    var ds = new DataSet();

    adapter.Fill(ds, "releaseNote");

    DataTable data = ds.Tables["releaseNote"];

    Console.WriteLine(data.Rows.Count);

    foreach (DataRow row in data.Rows)
    {
        releaseNoteChangeList.Add(Convert.ToString(row["ChangeID"]));
        Console.WriteLine(Convert.ToString(row["ChangeID"]));
    }

3 个答案:

答案 0 :(得分:1)

在Excel文档中将所有值格式化为文本,然后查看会发生什么。 为此,在Numeric&amp ;;旁边创建一个列。 AlphaNumeric值并创建一个类似= A1&“”的公式。复制并粘贴值,然后用新值替换原始列,并删除刚刚创建的列。

答案 1 :(得分:0)

我认为Microsoft.ACE.OLEDB.12.0根据它可以读取的第一行猜测列数据类型。它假设整个列应该是数字。

因此,您没有空白单元格而NULL/,因为您Text不是数字字符。

您必须以某种方式将列限制为Select Cstr(col) ...类型或手动执行。

我不一定熟悉ACE,但d = {e[0] : {e[1] : e[2] if len(e) == 3 else True} for e in d}之类的东西可能有用。

答案 2 :(得分:0)

@tafia,谢谢你的回复。正如您所建议的那样,我通过更改连接字符串将所有数据更改为文本。

        string connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + fileName + ";Extended Properties='Excel 8.0;HDR=Yes;IMEX=1;'";