2016-11-30 2 views
-1

У меня есть книга Excel и вам необходимо прочитать данные с третьего (и финального) листа в этой книге. Я использовал старый код, который просмотрел все рабочие листы, но модифицирован его, чтобы перейти к третьему листу:Получите имена вкладок в книге Excel и используйте только один

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

Это взял меня на третий лист, мой код будет выполняться, и все было хорошо.

Теперь клиент отправляет либо книгу с тремя закладками с листом, который мне нужен в другом месте (1-я или 2-я вкладка), либо они отправляют книгу с четырьмя вкладками, а лист, который мне нужен, может быть где угодно.

Есть ли способ выбрать один и тот же лист, который мне нужен, либо найдя имя вкладки, либо текст в ячейке A1, и используя этот рабочий лист и этот рабочий лист?

Большое спасибо!

ответ

0

Если вы не знаете «где» рабочий лист находится в рабочей книге, вы можете прокручивать каждый лист и проверять имя листа, или, как вы говорите «текст в cellA1».

Проверка текста в ячейке A1 ... Я не уверен, как вы узнаете, был ли лист подходящим, посмотрев на первую ячейку. Что делать, если все листы имеют значение в первой ячейке? И что будет содержать эта ячейка? Будет ли ячейка содержать текст, который говорит «это правильный лист»? Поэтому я предполагаю, что в этой книге есть только один лист с данными, а остальные листы пусты.

Проникновение через листы в книге относительно просто, однако, если вы не знаете, что такое имя листа, тогда может быть трудно определить правильный лист. Используя мое предположение (выше) только одного листа с данными, вы можете проверить каждый лист, чтобы узнать, сколько строк данных на каждом листе. Затем тот, который содержит более 1 строки данных, является листом, который вы ищете. Если у других листов также есть данные, это не сработает, и вам придется идентифицировать целевой лист каким-либо другим способом.

Если вы ЗНАЕТЕ имя рабочего листа, то вам хорошо идти. В вашем случае вы заявили, что рабочий лист был «Sheet3», но не может быть в третьем индексе рабочих листов в книге. В этом случае вы можете ссылаться на листе по имени, как вы просили с:

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

Если target возвращает нуль, то таблица с именем «Sheet3» не существует. Если цель не равна нулю, то вы нашли рабочий лист и на него может ссылаться переменная рабочего листа 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 
} 

Ниже приведен метод, который вы можете использовать, чтобы увидеть, если «лист» с прилагаемым названием «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()); 
    } 
} 

Надеется, что это помогает

Смежные вопросы