我使用以下的powershell代码在excel文档中搜索字符串,并根据是否找到它返回true或false。
if (test-path $filePath) {
$wb = $xl.Workbooks.Open($filePath)
if ([bool]$xl.cells.find("German")) {$found = 1}
}
我希望能够获得字符串的单元格引用(如果找到它),但我无法弄清楚或在谷歌上找到答案。你能帮忙吗?
答案 0 :(得分:3)
虽然有一种方法可以在整个工作簿中搜索值,但通常会在工作表上执行Range.Find method。您正在为工作簿设置var但仍将该应用程序用作搜索。您应该从工作簿中获取工作表并将其用作查找操作的目标。
以下是对PS1的一些建议修改。
$filePath = "T:\TMP\findit.xlsx"
$xl = New-Object -ComObject Excel.Application
$xl.Visible = $true
if (test-path $filePath) {
$wb = $xl.Workbooks.Open($filePath)
$ws = $xl.WorkSheets.item("sheet1")
if ([bool]$ws.cells.find("German"))
{
$found = 1
write-host $found
write-host $ws.cells.find("German").address(0, 0, 1, 1)
}
}
要继续搜索所有匹配项,请使用Range.FindNext method,直到您循环回原始单元格地址。
$filePath = "T:\TMP\findit.xlsx"
$xl = New-Object -ComObject Excel.Application
$xl.Visible = $true
if (test-path $filePath) {
$wb = $xl.Workbooks.Open($filePath)
$ws = $wb.WorkSheets.item("sheet1")
$rc1 = $ws.cells.find("German")
if ($rc1)
{
$found = 1
$addr = $rc1.address(0, 0, 1, 0)
do
{
$rc1 = $ws.cells.findnext($rc1)
write-host $rc1.address(0, 0, 1, 0)
} until ($addr -eq $rc1.address(0, 0, 1, 0))
}
}
由于缺少大量代码,因此很难提供更多的通用性。我用自己的测试环境填写了缺失的信息。