【问题标题】:C# code to find the end range of excel sheet data using Data tablesC# 代码使用数据表查找 excel 工作表数据的结束范围
【发布时间】:2012-06-25 06:48:00
【问题描述】:

我正在尝试使用 SSIS 脚本组件查找 Excel 行位置以获取我的 excel 数据提取范围的 END 点。我在脚本任务中使用 Datatable 来促进这一点。 在下面的示例中,我的工作表范围始终以 1 开头。我需要通过在 A2:A10 范围内搜索“数据结束”来获取结束位置

下面是我正在使用的代码

string currentable ="Sheet1$"
string strSQL = "Select * From ["+currentTable+"A2:A10]";
int iCnt = 0;
OleDbDataAdapter objAdapter = new OleDbDataAdapter(strSQL, excelConnection);
DataSet ds = new DataSet();
objAdapter.Fill(ds, currentTable);
DataTable dt = ds.Tables[currentTable];


foreach (DataRow  row in dt.Rows)
{
    MessageBox.Show("In for Loop");
    iCnt = iCnt + 1;
    MessageBox.Show(row[iCnt].ToString());


}

在这段代码中,我收到以下错误

System.IndexOutOfRangeException:找不到第 1 列。

我需要浏览 excel 的第一列并搜索字符串“End of Data”并获取它的位置。

任何想法/帮助

谢谢

【问题讨论】:

  • 我认为列 A 将是索引 0 不是吗(您正在增加每行的列索引)?因此,您根本不需要 iCnt - row[0].ToString() 将是 A 列的内容,那么您可能只需检查您正在寻找的字符串(不过,我曾想过,它会使用 where 子句会更有效,但我不知道这是否可行)。
  • 你不是在工作表名称之后和范围之前缺少一个“$”吗?

标签: c#


【解决方案1】:

上面的代码看起来有点错误。用于选择数据的 SQL 选择单行,但当仅存在一列 (row[0]) 时,for 循环会查看第二列 (iCnt + 1)。

无论如何,这样的事情可能会满足您的需求:

var lastRow = dt.Rows.AsEnumerable().Select((row, index) => new { Name = row.ToString(), index }).First(row => row.Name == "End of data").index;

【讨论】:

  • 是的,你是对的。我以为它会返回 10 行。我正在尝试您提供的代码。它给出了一个错误,说“System.Data.DataRowCollection”不包含“AsEnumerable”的定义。我需要为此导入任何类吗?
  • 我没有 Linq 相关的 DLL 文件。有没有办法我们可以使用 For 循环转换这段代码。请告诉我
猜你喜欢
  • 1970-01-01
  • 2015-11-22
  • 1970-01-01
  • 2011-04-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多