如何检测Excel单元格是否包含指定数组中的任一数字?
我来帮你捋捋这段PowerShell代码的问题哈~
首先看几个关键错误:
- 匹配方向搞反了:
-match运算符是左边的字符串去匹配右边的正则规则,你现在写的$numbers -match $currentCell是拿数组里的数字去匹配单元格内容,逻辑完全反了,应该改成$currentCell -match $numbers。 - 输出时机不对:你把
Write-Host放在循环内部,只要某次循环没匹配到就会输出一次,同一个单元格可能会被重复输出好几次,得等遍历完整个数组,确认完全没匹配项再输出。 - 可以优化效率:找到匹配的数字后就没必要继续遍历剩下的了,直接跳出循环就行。
给你修正后的代码,还加了一些防错处理:
# 假设$i是你遍历行的循环变量,保持你的原有上下文 $currentCell = $openedworksheet.Cells.Item($i, 1).Value() $numberArray = '1', '2', '3', '4' $hasMatch = $false foreach ($num in $numberArray) { # 先判断单元格不为空,再用正确的方向匹配,同时转义正则特殊字符 if ($currentCell -and $currentCell -match [regex]::Escape($num)) { $hasMatch = $true break # 找到匹配直接跳出循环,不用继续检查 } } # 遍历完所有数字后,确认没有匹配才输出内容 if (-not $hasMatch) { Write-Host "未匹配到任何数字的内容:$currentCell" }
额外说两个细节:
- 用
[regex]::Escape($num)是个好习惯,万一以后数组里的数字带了正则特殊字符(比如+、.),也不会出现匹配异常。 - 加
$currentCell -and是防止单元格为空时,-match运算符报错。
内容的提问来源于stack exchange,提问作者CFW4.20
相关产品推荐
相关产品推荐

