我在C#(和SQL Server)中处理Excel数据。我需要能够在任何有问题的excel行上向最终用户报告。自然的方法是给出Excel行号。但是,我不知道如何获得该行号以供参考。
我有这样的事情:
OleDbCommand cmd = new OleDbCommand("SELECT * FROM MyWorkSheet$", conn);
并希望这样的事情:
OleDbCommand cmd = new OleDbCommand("SELECT ExcelRowId,* FROM MyWorkSheet$," conn);
SQL:ROW_NUMBER()确实有效,因为我无法提供适当的ORDER BY。 Excel's:查询字符串中无法访问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 row;
foreach (DataTable t in ds.Tables)
{
t.Columns.Add("RowNum",typeof(Int32));
row = 1;
foreach (DataRow r in t.Rows)
{
r["RowNum"] = row++;
}
}
每个Datatable对象(
DataTable t;
)有一个DataTable.Rows Property
(
t.Rows
)返回一个DataRowCollection Class
。使用DataRowCollection.IndexOf(DataRow) Method
(
t.Rows.IndexOf(r)
),您可以知道数据表中与Excel文件中的行号相关的行的索引。