C# .xls导入到datatable时缺少某些字段

C# .xls导入到datatable时缺少某些字段,c#,oledb,C#,Oledb,我正在使用OLEDB连接将数据从.xls导入datatable。 我的代码是 public static DataTable getXlssheetstoDatatable(string ExcelFilePath) { string query = "select * from ["Test$"]"; try { System.Data.OleDb.OleDbConnection MyConnection; System.Data.Dat

我正在使用OLEDB连接将数据从.xls导入datatable。 我的代码是

public static DataTable getXlssheetstoDatatable(string ExcelFilePath)
{
    string query = "select * from ["Test$"]";
    try
    {
        System.Data.OleDb.OleDbConnection MyConnection;
        System.Data.DataSet DtSet;
        System.Data.OleDb.OleDbDataAdapter MyCommand;
        MyConnection = new System.Data.OleDb.OleDbConnection("provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + ExcelFilePath + @";Extended Properties=""Excel 8.0;IMEX=1;TypeGuessRows=0;ImportMixedTypes=Text""");

        //MyConnection = new System.Data.OleDb.OleDbConnection("provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + ExcelFilePath + @";Extended Properties=""Excel 12.0;IMEX=1;TypeGuessRows=0;ImportMixedTypes=Text""");
        MyCommand = new System.Data.OleDb.OleDbDataAdapter(query, MyConnection);
        MyCommand.TableMappings.Add("Table", "dtHeader");
        DtSet = new System.Data.DataSet();
        MyCommand.Fill(DtSet);

        DataTable dt = DtSet.Tables[0];
        MyConnection.Close();
        return dt;
    }
    catch (Exception ex)
    {
        return new DataTable();
    }

    return new DataTable();
}
具有以下数据的xls将正常工作:

Col1    Col2        Col3    Col4    Col5    Col6    Col7        Col8    Col9
HD      HD123456    1234    xyz     95              58.5 X 91   16   
        123457      1235    abc     90              65           3   
        123458      1236    mnb     90              78           1   
        123489      1237    xyz     54              48           1.85    
对于上面任意数量的行,excel数据都可以正常工作。 但在以下情况下,它不起作用:

Col1    Col2        Col3    Col4    Col5    Col6    Col7        Col8    Col9
        123457      1235    abc     90               65          3   
        123458      1236    mnb     90               78          1   
        123489      1237    xyz     54               48          1.85
        123457      1235    abc     90               65          3   
        123458      1236    mnb     90               78          1   
        123489      1237    xyz     54               48          1.85
        123457      1235    abc     90               65          3   
        123458      1236    mnb     90               78          1   
        123489      1237    xyz     54               48          1.85
        123457      1235    abc     90               65          3   
        123458      1236    mnb     90               78          1   
        123489      1237    xyz     54               48          1.85
        123457      1235    abc     90               65          3   
        123458      1236    mnb     90               78          1   
        123489      1237    xyz     54               48          1.85
        123457      1235    abc     90               65          3   
        123458      1236    mnb     90               78          1   
        123489      1237    xyz     54               48          1.85
        123457      1235    abc     90               65          3   
        123458      1236    mnb     90               78          1   
        123489      1237    xyz     54               48          1.85
HD      HD123456    1234    xyz     95               58.5 X 91   16  

你能把你的数据格式化一点吗?使用Microsoft.ACE.OLEDB.12.0提供程序。您可以选择一个单元格范围:string sheetName=Test;字符串查询=从[{sheetName}$A1:I22]中选择*或从[{sheetName}$A1:I65535]中选择*。另请参阅您需要使用语句来处理或声明DataAdapter、DataSet和连接调用的注释。Close会这样做,但您应该遵循一次性模式-因为您不需要DataSet而是DataTable,所以创建并填充一个而不是DataSet-最后返回新DataTable;超出范围无法访问代码-此:从[Test$]中选择*;是错误的。jet和ACE引擎不喜欢列1中的空数据。以前见过这个问题。jet似乎使用第一列作为行标题。尝试将HDR=Yes添加到连接字符串中,看看这是否有帮助。在第一个文件中,混合类型列出现在顶部。其中,在第二个excel混合型列中,最后显示。因此,datatable中缺少混合类型数据