做一个与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在这里不起作用。)