是否存在与Excel表格相关的If语句

时间:2016-10-18 21:05:47

标签: excel powershell worksheet

我希望能够检查Excel中的表格和工作表是否具有名称" ALPHA" (例如)作为我的自动脚本的一部分存在或不存在。

我的主要目标是能够执行以下功能:

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是

中的变量,它需要能够工作
ForEach (Alpha in Bet)

事实上可能还有其他表格,而不仅仅是Alpha,而且我不想仅通过执行" if -eq"来触发代码。或者" if -ne"影响那些床单

感谢@ mklement0的澄清和回答

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

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

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

 if ($wst) { Echo 1 }
 Else {Echo 2}

1 个答案:

答案 0 :(得分:1)

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

$wst = $wbk.worksheets | where {$_.name -eq "*ALPHA*"}

If (Test-Path $wst) { ... }

必须(注意使用-like代替-eq,并且缺少Test-Path):

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

if ($wst) { ... }

要使用通配符(模式)匹配,您必须使用专用的-like运算符,而不是-eq

如果没有工作表匹配,则返回$null,因此如果返回至少1个工作表,则条件if ($wst)将仅评估为$true
因此,请注意$ws实际上可能是工作表的数组,如果多个匹配名称模式。

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