2016-11-30 1 views
-1

Excelワークブックがあり、そのワークブックの3番目(最終)のワークシートからデータを読み取る必要がありました。私は、すべてのワークシートでスキャン古いコードを使用しますが、第三のワークシートにジャンプし、それを修正:Excelブックのタブの名前を取得して1つだけを使用する

foreach (var worksheet in Workbook.Worksheets(excelInput).skip(2)) 

これが第三のワークシートに連れて行ってくれた、私のコードが実行さだろう、とすべてが大丈夫でした。

クライアントは、必要なシートが1枚目または2枚目のタブ付きの3タブ付きブックを送信しているか、または4タブ付きブックを送信していて、必要なシートをどこにでも置くことができます。

タブの名前またはセルA1のテキストを見つけて、そのワークシートとそのワークシートのみを使用して、必要なシートを1つだけ選択する方法はありますか?

ありがとうございました!

答えて

0

「どこで」ワークブックがワークブックにあるかわからない場合は、各シートをループしてシート名を確認するか、「cellA1のテキスト」と言うことができます。

セルA1のテキストを確認しています...最初のセルを見てシートが適切かどうかわかりません。すべてのシートが最初のセルに値を持つ場合はどうなりますか?その細胞には何が含まれていますか?セルに「これは正しいシートです」というテキストが含まれていますか?だから私は、このワークブックにはデータ付きのシートが1枚しかなく、他のシートは空であると仮定しています。

ブックのシートをループするのは比較的簡単ですが、シートの名前がわからない場合は、適切なシートを特定するのが難しい場合があります。 1つのシートにデータがあるという前提を使って、各シートをチェックして、各シートのデータ行の数を確認することができます。次に、1行以上のデータがあるものが、探しているシートです。他のシートにもデータがある場合、これは機能せず、ターゲットシートを別の方法で識別する必要があります。

ワークシートの名前を知っていれば、いいですね。あなたのケースでは、ワークシートは "Sheet3"でしたが、ブックのワークシートの3番目のインデックスにはない可能性があります。あなたが尋ねたように、この場合、名前でシートを参照することができます。

Worksheet target = workbook.Sheets[“Sheet3”]; 

target場合はnullを返し、その後、「シート3」という名前のワークシートが存在しません。 targetがnullでなければ、ワークシートを見つけて、ワークシート変数targetで参照できます。シートは常に「シート3」と命名されている場合は、説明したものから

は、単に使用します。

以下
if (SheetExist(workbook, "Sheet3")) 
{ 
    Worksheet myWS = workbook.Sheets["Sheet3"]; 
    if (myWS.Cells[1,1].Value != null) 
    Console.WriteLine("\nCell[1,1] of sheet3: " + myWS.Cells[1, 1].Value.ToString() + "\n"); 
    else 
    Console.WriteLine("\nCell[1,1] of sheet3 is Null/has no value"); 
} 
else 
{ 
    //Console.WriteLine("Worksheet NOT found!"); 
    // sheet named "Sheet3" does not exist in the workbook 
} 

は、あなたが指定された名前「シート名を持つ「ワークシート」かどうかを確認するために使用できる方法であり、ワークシートのインデックスが必要な場合は、これを変更してインデックスを返すか、存在しない場合は-1を返すことができます。

private static bool SheetExist(Excel.Workbook workbook, string sheetName) 
{ 
    Worksheet target = workbook.Sheets[sheetName]; 
    if (target != null) 
    { 
    //Console.WriteLine("Worksheet found!"); 
    return true; 
    } 
    else 
    { 
    //Console.WriteLine("Worksheet NOT found!"); 
    return false; 
    } 

すべてのシートをループし、 "UsedRange"機能を使用してデータの行数をチェックする方法。これは、ブック内のワークシートのインデックスも識別します。

private static void LoopThruAllSheets(Workbook workbook) 
{ 
    Sheets allWorkSheets = workbook.Worksheets; 
    foreach (Worksheet curWS in allWorkSheets) 
    { 
    Console.WriteLine("Worksheet : at index " + curWS.Index + " name: " + curWS.Name.ToString() + " UsedRange.Rows.Count: " + curWS.UsedRange.Rows.Count.ToString()); 
    } 
} 

が、これは

を役に立てば幸い
関連する問題