c#OleDbConnection csv to excel跳过csv的第一行

时间:2014-05-27 18:46:40

标签: c# excel csv oledb

由于某种原因使用此代码时,它会跳过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;
                    }
                }

3 个答案:

答案 0 :(得分:1)

除非您使用:

,否则它将跳过第一行标题
Extended Properties=Text;HDR=No;

但在这种情况下,它会将第一行视为数据行,这可能(在某个阶段)导致数据类型错误。

通常您会跳过第一行,并在Excel中手动创建标题。

答案 1 :(得分:0)

This comment注意到将FULL PATH传递给SELECT语句时的相同行为。由于文件目录在OleDbConnection中提供,因此不需要再次提供。

有一些类似的注释at this answer (to a different question)表明路径也应该在连接中。

它还建议使用“真正的”CSV解析器。

答案 2 :(得分:0)

还发现当HDR = YES时,您可以使用table.Columns [0] .ColumnName并使用某种循环来获取第一列。