c# OleDbConnection csv to excel跳过csv的第一行
本文关键字:csv 一行 OleDbConnection to excel 跳过 | 更新日期: 2023-09-27 18:05:20
当出于某种原因使用此代码时,它会跳过csv文件的第一行,即头文件。我做错了什么?
string strFileName = path;
OleDbConnection conn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source = " + System.IO.Path.GetDirectoryName(strFileName) + "; Extended Properties = '"Text'"");
conn.Open();
OleDbDataAdapter adapter = new OleDbDataAdapter("SELECT * FROM " + System.IO.Path.GetFileName(strFileName), conn);
DataSet ds = new DataSet("Temp");
adapter.Fill(ds);
DataTable tb = ds.Tables[0];
string data = null;
for (int j = 0; j <= tb.Rows.Count - 1; j++)
{
for (int k = 0; k <= tb.Columns.Count - 1; k++)
{
data = tb.Rows[j].ItemArray[k].ToString();
SaturnAddIn.getInstance().Application.ActiveWorkbook.ActiveSheet.Cells[j + 1, k + 1] = data;
}
}
它将跳过第一行标题,除非您使用:
Extended Properties=Text;HDR=No;
但是在这种情况下,它将把第一行视为数据行,这可能会(在某些阶段)导致数据类型错误。
通常你会跳过第一行,在Excel中手动创建标题。
这个注释注意到当FULL PATH被传递到SELECT语句中时的相同行为。由于该文件的目录已在OleDbConnection
中提供,因此不需要再次提供。
在这个答案中(对另一个问题)有一些类似的注释,表明路径也应该在连接中。
它还建议使用"真正的"CSV解析器。
还发现,当HDR=YES时,您可以使用table.Columns[0]获取第一列。