C#如何跳过Excel中的第一行?

8

我正在使用OleDbCommand将xls文件导入到ds中。 我遇到的问题是在ds上的foreach期间,它跳过了第一行。 我无法弄清楚原因。 有什么建议吗?

cmd.CommandText = string.Format("SELECT * FROM [{0}$]", worksheetName);
conn.Open();

var adapter = new OleDbDataAdapter();
var ds = new DataSet();
adapter.SelectCommand = cmd;
adapter.Fill(ds);
var table = ds.Tables[0];

foreach(DataRow row in table.Rows){ // rest of my code }

2
你的电子表格有标题行吗?如果没有,我猜它认为你有,并且将顶部行视为列标题。 - Doctor Jones
1
你的连接字符串是什么?它很可能认为第一行是表头并忽略了它。 - Brian Kintz
也许它会将第一行视为标题? - Aykut Çevik
能否让我们看看你的“//rest of my code”部分,因为问题可能就发生在那里。 - Jethro
@DoctaJonez - Excel电子表格中没有标题。数据从第一列,第一行开始。 - Scott
显示剩余2条评论
3个回答

15

根据评论中提到的,更改连接字符串:

string cnn = string.Format( 
    "Provider=Microsoft.ACE.OLEDB.12.0;" +
    "data source={0}{1}{2};" +
    "Extended Properties=Excel 8.0;", 
    fileLocation, fileName, fileExtension);

为:

string cnn = string.Format( 
    "Provider=Microsoft.ACE.OLEDB.12.0;" +
    "data source={0}{1}{2};" +
    "Extended Properties=Excel 8.0;HDR=No", 
    fileLocation, fileName, fileExtension);

7

检查您的连接字符串。很可能包含以下内容:

HDR=Yes

这表示第一行是表头


2
如果是,则将其更改为 HDR=No :) - Brian Kintz

0
也许你告诉它跳过第一行了。我记得有一个属性听起来像是FirstRowIsHeader。我想如果设置为true,那么就会跳过。这可以在创建连接的时候更改。

不,代码就是粘贴的那样。没有跳过第一行的指令!所以除非它默认为真。 - Scott
是的,我认为默认情况下它被设置为true,尝试将HDR设置为No,使用这个网址http://www.connectionstrings.com/excel - saj

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接