使用oledb从空文件中读取 - 空字符串

时间:2013-12-10 13:51:18

标签: c# excel datatable oledb

我正在使用oledb从excel文件中读取。

    DataTable sheet1 = new DataTable();
    string excelCS = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path + ";" + "Extended Properties=\"Excel 12.0 Xml;HDR=NO;TypeGuessRows=0;ImportMixedTypes=Text\"";

    using (OleDbConnection connection = new OleDbConnection(excelCS))
    {
        connection.Open();
        string selectSql = @"SELECT * FROM [Sheet1$]";   
        using (OleDbDataAdapter adapter = new OleDbDataAdapter(selectSql, connection))
        {
            adapter.Fill(sheet1);
        }
        connection.Close();
    }

但文件的某些单元格存在问题。

对于某些单元格,我得到一个空值而不是文本。我试图将一些其他文本放入这些单元格但它不起作用 - 我仍然得到空字符串。 但删除列后再插入我的应用程序获取正确的单元格值。重要的是问题不在于列中的所有单元格。

这是单元格格式的问题吗?此excel文件将由另一个系统生成,因此我无法手动修改它。

有人有什么问题有什么不对,我该怎么办?

3 个答案:

答案 0 :(得分:1)

在连接字符串末尾使用IMEX = 1。这将解决您的问题。

  

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

请注意,在您使用Update而不是Select时,有时使用IMEX会涉及一些错误。

答案 1 :(得分:1)

使用此方法在C#

中将Execel转换为不带空字符串的数据集
 public static DataSet ConvertExcelToDataTable(string FileName)  
    {
        DataSet ds = new DataSet();
        string strConn = "";

        strConn = "Provider=Microsoft.ACE.OLEDB.12.0;" + "Data Source=" + FileName + ";Extended Properties=\"Excel 8.0; HDR=YES; IMEX=1;\"";
        OleDbDataAdapter da = new OleDbDataAdapter
        ("SELECT * FROM [Sheet1$]", strConn);


        da.Fill(ds);

        return ds;          
    }  

它将返回数据集。

答案 2 :(得分:0)

我有这个问题。我发现在返回空白值的单元格上,数据看起来像字符串,但其余数据看起来像数字,因此excel将字符串存储在与数字不同的位置。我将列格式更改为文本,并且拾取了所有数据。

此主题可能有助于更改格式:Format an Excel column (or cell) as Text in C#?