【问题标题】:How to search an entire excel workbook for a particular string using powershell如何使用powershell在整个excel工作簿中搜索特定字符串
【发布时间】:2017-08-19 04:29:40
【问题描述】:

我需要在包含多张工作表的 Excel 电子表格中搜索特定字符串。我正在寻找一种方法来搜索 Excel 文件的全部内容,类似于 Excel 中的 Find All 选项,范围设置为工作簿,而不仅仅是工作表。

如果在常规文件中有类似于特定字符串的搜索字符串(即),那就太好了

gci xcelfile.xls | select-string -pattern $mySearchString

我已经搜索了互联网,但我没有看到太多使用 powershell 搜索现有 excel 文件内容的现有信息。我希望我能在这里得到一些指示,让我实现我的目标。

非常感谢任何帮助。 谢谢 唐

【问题讨论】:

  • stackoverflow.com/questions/30200920/… 也许吧。假设没有全局可以轻松枚举所有工作表
  • 我使用了上面的 select-string 命令,它确实在文件中找到了字符串,但是文件有多个工作表,我也需要从相邻列中提取数据。我得到的结果包含一个数值,但我不能轻易地将它与任何东西联系起来。
  • 马特,对不起,我读了你说的,但我不明白你的意思。那对我有什么用,我该怎么做?谢谢
  • 我对 'a.b.c.d' 的搜索返回 excelfile.xls:328: a.b.c.d 的结果,第二次搜索的 IP 没有排除任何其他潜在候选人给了我多个不准确的结果:excelfile .xls:它基本上是在末尾使用通配符执行搜索 a.b.c.1* 192.168.22.1 将返回任何可能的变体 .1, .1[0-9] 如何限制结果以搜索更具体的 IP a.b.c. 1 ?
  • 您的问题和 cmets 越来越多。你知道你想做什么。把它分成几部分是一个好的开始。但是,您不会在一个问题中得到所有答案。您不能使用 select-string 搜索 Excel 文件。它不是平面文本文件。您需要使用第 3 方库或 Excel com 对象,如链接问题所示。

标签: excel string powershell full-text-search


【解决方案1】:

打开 Excel

加载文件

遍历每个工作表

搜索范围

循环查找下一个输出索引 $Column$Row

退出 Excel

$File = "C:\TEST.xlsx"
$SearchString = "TEST"
$Excel = New-Object -ComObject Excel.Application
$Workbook = $Excel.Workbooks.Open($File)
for($i = 1; $i -lt $($Workbook.Sheets.Count() + 1); $i++){
    $Range = $Workbook.Sheets.Item($i).Range("A:Z")
    $Target = $Range.Find($SearchString)
    $First = $Target
    Do
    {
        Write-Host "$i $($Target.AddressLocal())"
        $Target = $Range.FindNext($Target)
    }
    While ($Target -ne $NULL -and $Target.AddressLocal() -ne $First.AddressLocal())
}
$Excel.Quit()

【讨论】:

  • 自从我写了在 cmets 中链接的答案后,我学得更好了。现在我会推荐ForEach($Sheet in $($Workbook.Sheets)){ 循环,然后你可以做$Target = $Sheet.UsedRange.Find($SearchString)。使用UsedRange 比使用Range("A:Z") 更好,这样您搜索的次数不会超出您的需要,并且您一定会捕获所有可能的数据。
  • @TheMadTechnician 我讨厌前一天写的大部分代码
猜你喜欢
  • 2020-08-10
  • 1970-01-01
  • 1970-01-01
  • 2022-11-07
  • 1970-01-01
  • 1970-01-01
  • 2023-02-08
  • 2021-04-03
  • 1970-01-01
相关资源
最近更新 更多