C# .xls导入到datatable时缺少某些字段
我正在使用OLEDB连接将数据从.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
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中缺少混合类型数据