获取Excel工作簿中的选项卡名称并只使用一个
我有一个Excel工作簿,并且需要从该工作簿中的第三个(也是最后一个)工作表中读取数据。我使用的旧代码,通过所有工作表扫描,但修改了它跳到第三个工作表:获取Excel工作簿中的选项卡名称并只使用一个
foreach (var worksheet in Workbook.Worksheets(excelInput).skip(2))
这把我送到第三工作表,我的代码将执行,一切都还顺利。
现在,客户端正在发送一个三页工作簿,并在其他地方(第一个或第二个选项卡)需要的工作表发送,或者他们发送四个标签的工作簿,而我需要的工作表可能在任何地方。
有没有办法通过查找选项卡的名称或单元格A1中的文本并仅使用该工作表和该工作表来选择我需要的一张和另一张表?
非常感谢!
如果您不知道工作表位于工作簿中的“哪里”,则可以遍历每个工作表并检查工作表名称,或者如您所说的“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());
}
}
希望这有助于