做一个与Excel表格相关的If语句

我希望能够检查一个名为“ALPHA”(例如)的Excel中的表或工作表是否存在或不存在作为我的自动化脚本的一部分。

我的主要目标是能够做一些function如下:

if ("ALPHA" exists) {Code A} if ("ALPHA" does not exist) {Code B} 

你知道标准的If语句的东西

但我似乎无法弄清楚如何去做

我努力了

 $file = "$path\excel.xlsx" $Exl = New-Object -ComObject "Excel.Application" $Exl.Visible = $false $Exl.DisplayAlerts = $false $wbk = $Exl.Workbooks.Open($file) $wst = $wbk.worksheets | where {$_.name -eq "*ALPHA*"} If (Test-Path $wst) {echo 1} Else {echo 2} 

但我得到的是:

 Test-Path : Cannot bind argument to parameter 'Path' because it is null. 

部分要求是它需要能够工作,如果Alpha是一个variables

 ForEach (Alpha in Bet) 

事实上,可能有其他Sheets不仅仅是Alpha,而且我不想通过执行影响这些表的“if -eq”或“if -ne”来触发代码


感谢@ mklement0的澄清和答复

实施起来要比我想象的简单得多

以下是我正在寻找的应答码:

  $wst = $wbk.worksheets | where {$_.name -like "*ALPHA*"} if ($wst) { Echo 1 } Else {Echo 2} 

据我所知,唯一需要改变的是:

 $wst = $wbk.worksheets | where {$_.name -eq "*ALPHA*"} If (Test-Path $wst) { ... } 

必须是(注意使用-like而不是-eq ,而不使用Test-Path ):

 $wst = $wbk.worksheets | where {$_.name -like "*ALPHA*"} if ($wst) { ... } 

要使用通配符 (模式)匹配,您必须使用专用操作符,而不是-eq

如果没有工作表匹配,则返回$null ,所以if ($wst)返回至less1个工作表时才计算为$true则条件
因此,请注意$ws可能实际上是一个工作表数组 ,如果有多个匹配的名称模式。

Test-Path cmdlet旨在与PowerShell 驱动器提供程序一起使用 ,这些function在这里不起作用。)