首页 > 解决方案 > 我需要在 Excel Range.Find 中定义默认值,还是可以跳过一些参数?

问题描述

我需要使用Range.Find在 Excel 文档中进行不区分大小写的搜索。

我目前正在使用以下命令尝试对https://haveibeenpwned.com返回的任何电子邮件地址进行不区分大小写的搜索

    $Found = $WorkSheet.Cells.Find($SearchText, $null, "xlValues", "xlWhole", "xlByRows", 1, $false) #What, After, Lookin, LookAt, SearchOrder, MatchCase 

它返回:

WARNING: [] No public exploits found!
Type mismatch. (Exception from HRESULT: 0x80020005 (DISP_E_TYPEMISMATCH))
At C:\Users\qqqq\Documents\incidents\Search-PwnAddress.ps1:31 char:9
+         $Found = $WorkSheet.Cells.Find($SearchText, $null, "xlValues" ...
+         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : OperationStopped: (:) [], COMException
    + FullyQualifiedErrorId : System.Runtime.InteropServices.COMException

如何正确进行范围查找以便进行不区分大小写的搜索?

标签: excelpowershell

解决方案


Range.Find - 注意xlValues,xlWholexlByRows不被称为Strings,而是常数。它们是特定的成员-EnumerationsXlFindLookIn枚举。XlLookAtXlSearchOrder

枚举具有引用特定值的描述性名称的成员 - 因此在这种情况下,您可以使用相应的值作为参数。尝试将它们的名称传递为Strings- 即"xlValues"- 将引发“类型不匹配”错误。

  • xlValues: -4163
  • xlWhole: 1
  • xlByRows: 1

另请注意,您应该使用[Type]::Missing而不是$null,正如这个答案所暗示的那样。


推荐阅读