我希望能够检查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}
答案 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 驱动器提供程序一起使用,这些不在此处发挥作用。)