2017-11-15 7 views
1

私は非常によく教えてください私は何を説明しない場合は、私はC#に新しいです。 私はExcelファイルからいくつかのデータを読んで、そのデータを配列に格納しています。C#で配列(2次元)のInStrに相当するものは

excel.Application x1app = new excel.Application(); 
     x1app.Visible = true; 
     excel.Workbook x1workbook = x1app.Workbooks.Open(@"..."); 
     x1workbook.Activate(); 
     excel.Worksheet x1worksheet = x1workbook.Worksheets[1]; 
     excel.Range x1range = x1worksheet.UsedRange; 
     System.Array myvalues; 
     myvalues = (System.Array)x1range.Cells.Value; 

は、今私は、アレイ上VBAからInStrのために同等に使用したいが、私は同等だか分かりません。

私はArray.IndexOf(myvalue, "")を試しましたが、この作業は1次元配列に対してのみです。

+2

正確に何をしようとしているのか説明できますか?あなたは、文字列中の文字の最初のインデックスか、配列内の文字列の最初の出現を探していますか? – Jerodev

+0

なぜ、古いネストされたforループですか? –

+0

Excelファイルには国の列があり、すべてのセルにはこの "AP Desk DE"のようなテキストが含まれていますが、すべてのセルには国のみが変更されています。私は配列(行、列)からのデータを私の国のリストと比較したいと思います。 しかし、私は配列と私の文字列[]の間のマッチングを試みると、完璧なマッチではありません。だから私は配列(行、列)を見ているとき、私はそれが私のリストの国を含むかどうかを見たいと思います。 わからない場合は、別の方法で説明しようとします – Ionut

答えて

0

あなたがデータ構造に範囲をインポートするつもりなら、私は何をしたいことは、2D配列であると考え、以下のよう

object[,] myvalues = x1range.Cells.Value; 

個々の値を抽出することができます。

object cellValue = myvalues[3, 4]; 

すべてのセルをループしたい場合は、foreachが最も簡単です:

foreach (object o in myvalues) 
{ 
    string myText = o == null ? null : o.ToString(); 
} 

または、x/yの位置がimpの場合ortantは、あなたにX/Yをループは、次のことができます。

for (int i = 1; i < myvalues.GetLength(0); i++) 
{ 
    for (int j = 1; j < myvalues.GetLength(1); i++) 
    { 
     object o = myvalues[i, j]; 
    } 
} 

注意をC#は0ベースですが、Excel出力であなたは1ベースの参照を使用したいということ。

IndexOf関数はC#では動作しますが、このような配列に対しては機能しません。それを使用する場合は、配列を常にリストにキャストできます。

List<object> myList = myvalues.Cast<object>().ToList(); 
int found = myList.IndexOf("Foo");