执行与 Excel 现有工作表相关的 If 语句
Do an If statement relating to Excel Sheets existing
我希望能够检查 Sheet 或 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)
事实上可能还有其他 Sheet 而不仅仅是 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) { ... }
要使用通配符(模式)匹配,必须使用专用的-like
运算符,而不是-eq
.
如果没有工作表匹配,则返回 $null
,因此条件 if ($wst)
将仅在 至少 1 个工作表被计算为 $true
返回。
因此,请注意 $ws
实际上可能是工作表的 数组 ,如果有多个匹配名称模式的话。
(Test-Path
cmdlet 旨在与 PowerShell 驱动器提供程序 一起使用,此处未发挥作用。)
我希望能够检查 Sheet 或 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)
事实上可能还有其他 Sheet 而不仅仅是 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) { ... }
要使用通配符(模式)匹配,必须使用专用的-like
运算符,而不是-eq
.
如果没有工作表匹配,则返回 $null
,因此条件 if ($wst)
将仅在 至少 1 个工作表被计算为 $true
返回。
因此,请注意 $ws
实际上可能是工作表的 数组 ,如果有多个匹配名称模式的话。
(Test-Path
cmdlet 旨在与 PowerShell 驱动器提供程序 一起使用,此处未发挥作用。)