我已经在互联网上搜索了这个,但实际上找不到类似的问题。我正在编写一个从 Excel 获取数据并查看它的应用程序。
我所有的测试都是正确的,但突然间我发现导入包含连续数字的列然后字母将导致根本不显示包含这些字母的字段
PathConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + FilePath + ";Extended Properties=\"Excel 8.0;HDR=Yes;\";";
OleDbConnection conn = new OleDbConnection(PathConn);
System.Data.DataTable dtSchema = new System.Data.DataTable();
conn.Open();
dtSchema = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });
string Sheet1 = dtSchema.Rows[0].Field<string>("TABLE_NAME");
conn.Close();
OleDbDataAdapter myDataAdapter = new OleDbDataAdapter("Select * from [" + Sheet1 + "]", conn);
DataSet ds = new DataSet();
myDataAdapter.Fill(ds);
第一个数据集是常规结果
7841
7847s
2344
2262
7738
JD32916
JD329161
JD318161
JD31716
JD7643
JD21116
7194
第二个数据集是有问题的结果(请注意,我从“7847s”中删除了“s”)
7841
7847
2344
2262
7738
7194
如您所见,所有带有字母的字段都消失了,
它仅发生在有 5 个或更多连续字段且其中没有字母的情况下。示例(顶部的第二个数字包含“s”以防止发生该错误)
最佳答案
使用IMEX=1
在您的扩展属性中将所有列视为文本值。如果没有它,Jet 提供程序将根据该列中大多数值的类型推断数据类型,这可能不正确。
其次,由于您的数据没有标题行,您应该使用 HDR=NO
在您的扩展属性中也是如此。
关于导入 Excel 工作表时出现 C# 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40898372/