PowerShell操作Excel查找列中字符串部分工作簿运行异常问题
问题排查点
- 变量名拼写错误
你定义搜索关键词时使用的变量名是$SearchSrting(拼写错误,缺失字符t,正确拼写应为SearchString),但调用Range.Find()时传入的是从未赋值的$SearchString,相当于传入空值执行搜索,自然无法找到匹配结果。 - 文件路径错误
第一个脚本的目标文件路径写为"D:\Bank\UBS\KD_eMail.xlsx\Debitorenliste BESR.xlsm",其中KD_eMail.xlsx是Excel文件不是文件夹,无法作为路径的父级目录,你实际打开的文件本身就是错误的,自然无法匹配到目标内容。 - 未显式指定Find方法的匹配参数
Excel的Find()方法会继承上一次使用时的参数配置(比如是否大小写匹配、是否全词匹配、搜索范围等),如果没有显式指定参数,很容易因为环境配置差异找不到匹配内容。建议显式补充参数:
$Search = $Range.Find($SearchString, LookIn:=[Microsoft.Office.Interop.Excel.XlFindLookIn]::xlValues, LookAt:=[Microsoft.Office.Interop.Excel.XlLookAt]::xlWhole)
- 缺少空值判断和取值调用
如果Find()没有找到匹配内容会返回$null,你直接访问$Search.Row会触发空引用报错。另外你没有调用单元格的.Value()方法,就算找到匹配也只能拿到单元格对象而非实际值,建议补充逻辑:
if ($null -ne $Search) { $RGPath = $Worksheet.Cells($Search.Row, $Search.Column + 3).Value() } else { Write-Host "未找到匹配的RG-Nummer" }
- 重复打开文件逻辑错误
你已经通过GetActiveObject获取了正在运行的Excel实例,如果目标文件已经是打开状态,不需要再调用Workbooks.Open()打开,直接从$excel.Workbooks集合中匹配文件名即可,重复打开可能会触发文件锁定、打开副本等问题,导致你搜索的不是当前已打开的工作簿。
内容的提问来源于stack exchange,提问作者ASD
相关产品推荐
相关产品推荐

