3

私はこのように見えるxlsファイルを持っています:

http://i.stack.imgur.com/d2fux.png

これは、ヘッダーに依存する同じ情報のようなものです。この場合、ヘッダーは行22164、次のヘッダーは22178というようになります。

GUIには、ユーザーがパラメーターから選択できるものがあり、選択に応じてxlsファイルから情報をロードするオプションがあります。たとえば、次のように選択できます。

WR | ランダム| 4 | 6 | 15

その場合、A22165:O22177に保存されている情報を探します

ブックにすべての情報が記載されたシートがすでにあります。そのオブジェクトを呼び出しましょう[、]'valueArray':

Workbook workBook = _excelApp.Workbooks.Open(censFilePath);
        Worksheet sheet = (Worksheet)workBook.Sheets[1];
        Range sheetRange = sheet.UsedRange;
        object[,] valueArray = 
            (object[,])sheetRange.get_Value(XlRangeValueDataType.xlRangeValueDefault);

そして、xlsと同じ順序と形式でユーザーの選択を保存する別のオブジェクトを作成しました。そのobject[、]sthを'look4it'のように呼びましょう

私は私が言うことができるメソッドを見つけようとしています:「valueArray」で「look4it」を見つけたいのですが、そのメソッドの答えはA22164:E22164になるので、その後「valueArray」からコピーする範囲を計算して使用できます正しい情報。

Range.Findを試しましたが、Range内で一意の情報を探してアドレスを返すようですが、別のRange内のコンテンツを探すことができるものは何も見つかりませんでした。

どんな助けでも大歓迎です!

4

1 に答える 1

1

このシナリオで私が行うことは、最初に各ヘッダーとその場所で構成されるルックアップリストを作成することだと思います。リスト内のキーについては、ヘッダーセルを連結して、単一のルックアップ値を作成します。したがって、コードの直後に続きます。

Dictionary<string, int> lookUpList = new Dictionary<string, int>();

// Loop through the rows

for (int i = 0; i < valueArray.GetLength(0); i++)
{
    // Identify the header rows

    if (valueArray[i, 0].ToString() == "WR")
    {
        // Concatenate the header strings into a single string

        string header = "";

        for (int j = 0; j < valueArray.GetLength(1); j++)
        {
            header += valueArray[i, j].ToString();
        }

        // Store the header location

        lookUpList.Add(header, i + 1);
    }
}

これは即席であり、私はテストしていないことを覚えておいてください。メソッドがデータを配列に配置する方法が正確にわからないRange.get_Valueため、次元が間違っている可能性があります。また、提供したデータの画像に基づいて、スプレッドシートのヘッダー行を識別する方法についても想定しています。

とにかく、構築されたら、ヘッダーの行番号を抽出するために簡単なルックアップを実行できます。

string userSelectedHeader = "concatenation of whatever the user selected";
int rowNumber = lookUpList[userSelectedHeader];

それはあなたの質問に答えるのを助けるのにいくらか役立ちますか?

于 2012-11-01T16:27:10.423 に答える