0

SSISスクリプトコンポーネントを使用して、Excelのデータフェッチ範囲のENDポイントを取得するためにExcel行の位置を見つけようとしています。これを容易にするために、スクリプト タスクで 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" を検索してその位置を取得する必要があります。

任意のアイデア/ヘルプ

ありがとう

4

1 に答える 1

0

上記のコードに少しエラーがあるようです。データの選択に使用される SQL は 1 つの行を選択しますが、for ループは 1 つの列 (row[0]) しか存在しない場合に 2 番目の列 (iCnt + 1) を調べます。

とにかく、このようなものがあなたのニーズに合うかもしれません:

var lastRow = dt.Rows.AsEnumerable().Select((row, index) => new { Name = row.ToString(), index }).First(row => row.Name == "End of data").index;
于 2012-06-25T07:14:17.747 に答える