我正在尝试通过C#将以竖线分隔的文本文件导入数据集中。有些列未导入标题。
这是我的源数据:
Apple|Orange|Banana|Grape|Mango|Guava|Apricot|Pear|Peach
0C025X0|530335|WEROERWORUWEORWEU||Misc.||0|1|0
这是我的代码:
bool conversionStatus = true;
//instantiate new Excel Object
Application xlApp = new Application();
_Workbook wb = null;
if (xlApp == null)
{
Console.WriteLine("Excel is not properly installed!!");
Console.ReadLine();
return false;
}
//OleDbConnection conn = new OleDbConnection("Provider=Microsoft.Jet.OleDb.4.0; Data Source = " + Path.GetDirectoryName(filePath) + "; Extended Properties = \"text;HDR=No;FMT=TabDelimited\"");
OleDbConnection conn = new OleDbConnection("Provider=Microsoft.Jet.OleDb.4.0; Data Source = " + Path.GetDirectoryName(filePath) + "; Extended Properties = \"text;HDR=No\"");
conn.Open();
OleDbDataAdapter adapter = new OleDbDataAdapter("SELECT * FROM " + Path.GetFileName(filePath), conn);
DataSet ds = new DataSet("Temp");
adapter.Fill(ds);
我的格式设置在一个schema.ini文件中,该文件如下所示:
[Master.txt]
Format=Delimited(|)
ColNameHeader=False
以下是数据在数据集中的外观。
有谁知道为什么要包含某些标头,而没有标头呢?
我可以重现您的情况,并且已经解决了将schema.ini
文件更改为
[Master.txt]
Format=Delimited(|)
ColNameHeader=False
Col1=Name1 Text Width 100
Col2=Name2 Text Width 100
Col3=Name3 Text Width 100
Col4=Name4 Text Width 100
Col5=Name5 Text Width 100
Col6=Name6 Text Width 100
Col7=Name7 Text Width 100
Col8=Name8 Text Width 100
Col9=Name9 Text Width 100
设置带有示例的列列表name and type
似乎可以解决此问题。
经过一些研究,我注意到一个事实,即缺少的值来自具有冲突类型的值的列。
例如,列F2的第一行应包含单词ORANGE,但下一行应包含数字,并且所有其他列中的缺失值也会发生同样的情况。因此,我认为文本驱动程序已决定为列提供数字类型,并且当然不能在该列中表示字符串值。
现在,为了检验这一理论,我将以下行添加到您的代码中:
adapter.Fill(ds);
DataTable dt = ds.Tables[0];
Console.WriteLine(dt.Columns["F2"].DataType); // prints Int32
答对了。驱动程序已为F2列选择了数据类型Int32,并且单词ORANGE不能在此处显示。
要解决此问题,您可以将列名称及其数据类型添加到schema.ini中,以避免实际列值之间的歧义。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句