C# 我可以使用OleDB获取Excel行号吗?
我正在用C#(和SQL Server)处理Excel数据。我需要能够向最终用户报告任何有问题的excel行。这样做的自然方法是给出Excel的行号。然而,我不清楚如何获得该行编号以供参考 我有这样的想法:C# 我可以使用OleDB获取Excel行号吗?,c#,excel,oledb,C#,Excel,Oledb,我正在用C#(和SQL Server)处理Excel数据。我需要能够向最终用户报告任何有问题的excel行。这样做的自然方法是给出Excel的行号。然而,我不清楚如何获得该行编号以供参考 我有这样的想法: OleDbCommand cmd = new OleDbCommand("SELECT * FROM MyWorkSheet$", conn); OleDbCommand cmd = new OleDbCommand("SELECT ExcelRowId,* FROM MyWorkSheet
OleDbCommand cmd = new OleDbCommand("SELECT * FROM MyWorkSheet$", conn);
OleDbCommand cmd = new OleDbCommand("SELECT ExcelRowId,* FROM MyWorkSheet$," conn);
想要这样的东西:
OleDbCommand cmd = new OleDbCommand("SELECT * FROM MyWorkSheet$", conn);
OleDbCommand cmd = new OleDbCommand("SELECT ExcelRowId,* FROM MyWorkSheet$," conn);
SQL的:ROW_NUMBER()确实有效,因为我无法提供适当的ORDER BY。
Excel的:ROW()在查询字符串中不可访问。到目前为止,答案似乎是“否”,但我可以稍后创建它
int row;
foreach (DataTable t in ds.Tables)
{
t.Columns.Add("RowNum",typeof(Int32));
row = 1;
foreach (DataRow r in t.Rows)
{
r["RowNum"] = row++;
}
}
这似乎是可靠的,但它仍然感觉像是可以更自然地发生的事情。以以下示例代码为基础():
int行;
foreach(ds.Tables中的数据表t)
{
t、 添加(“RowNum”,typeof(Int32));
行=1;
foreach(t.Rows中的数据行r)
{
r[“RowNum”]=行++;
}
}
Excel行号可以通过以下方式获得:
每个Datatable对象(
DataTable t;
)具有DataTable.Rows属性
(
)返回一个数据行集合类
。使用DataRowCollection.IndexOf(DataRow)方法(
),您可以知道数据表中与Excel文件中的行号相关的行的索引。因此,用r.IndexOf(r)替换row++可以完成以下任务:
int行;
foreach(ds.Tables中的数据表t)
{
t、 添加(“RowNum”,typeof(Int32));
行=1;
foreach(t.Rows中的数据行r)
{
r[“RowNum”]=r.IndexOf(r);
}
}