2016-11-30 133 views
-1

我有一個Excel工作簿,並且需要從該工作簿中的第三個(也是最後一個)工作表中讀取數據。我使用的舊代碼,通過所有工作表掃描,但修改了它跳到第三個工作表:獲取Excel工作簿中的選項卡名稱並只使用一個

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

這把我送到第三工作表,我的代碼將執行,一切都還順利。

現在,客戶端正在發送一個三頁工作簿,並在其他地方(第一個或第二個選項卡)需要的工作表發送,或者他們發送四個標籤的工作簿,而我需要的工作表可能在任何地方。

有沒有辦法通過查找選項卡的名稱或單元格A1中的文本並僅使用該工作表和該工作表來選擇我需要的一張和另一張表?

非常感謝!

回答

0

如果您不知道工作表位於工作簿中的「哪裏」,則可以遍歷每個工作表並檢查工作表名稱,或者如您所說的「cellA1中的文本」。

檢查單元格A1中的文本...我不知道如何通過查看第一個單元格來知道該表單是否正確。如果所有工作表在第一個單元中都有值,會怎麼樣?那個細胞包含什麼?單元格是否包含說明「這是正確的表單」的文本?所以我假設這個工作簿只有一張帶有數據的工作表,而其他工作表是空的。

循環瀏覽工作簿中的工作表相對比較容易,但是如果您不知道工作表的名稱是什麼,則可能很難確定正確的工作表。根據我的假設(以上)只有一張紙和數據,然後您可以檢查每張紙來查看每張紙有多少行數據。然後,具有多於一行數據的那個是您正在查找的工作表。如果其他工作表也有數據,那麼這將不起作用,您將不得不以其他方式識別目標工作表。

如果您確實知道工作表的名稱,那麼您很好。在你的情況下,你說工作表是「Sheet3」,但可能不在工作簿中工作表的第三個索引中。在這種情況下,你可以通過名字,你問與引用表:

Worksheet target = workbook.Sheets[「Sheet3」]; 

如果target返回null,則命名爲「工作表Sheet」的工作表不存在。如果target不爲空,那麼您已經找到該工作表,並且它可以被target Worksheet變量引用。

從你所描述的,如果片總是被命名爲「工作表Sheet」,那麼簡單地使用:

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 
} 

以下是你可以用它來看看一個方法,如果一個「工作」與提供的名稱「SHEETNAME 「存在於給定的」工作簿「中。如果您需要工作表的索引,則可以將其更改爲返回索引,如果不存在,則返回-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()); 
    } 
} 

希望這有助於

相關問題