查找单元格值以Powershell开头或包含通配符

时间:2019-07-12 07:44:59

标签: excel powershell

我在Excel工作表中找不到值时遇到麻烦。 我想获取包含带有字符串值的单元格号,但是我需要使用通配符。 我要搜索的单元格以B-开头,我正在使用以下代码:

$excel = New-Object -ComObject excel.application
$destinationPath = "C:\Users\john\Desktop\wb.xlsx"
$workbook = $excel.Workbooks.Open($destinationPath)
$sheet1 = $workbook.WorkSheets.item("Sheet1")
$sheet1.activate()
$range = $sheet1.Range("A:A").EntireColumn
$s = $range.find("B-")
write-host "Range found: " $s.address().tostring()

这将返回包含B- ....的第一个单元格,但我需要知道以此开头的第一个单元格。所以我认为我必须使用通配符,但我不知道怎么做。

请,有人可以帮助我实现这一目标吗?

谢谢!! BR。

1 个答案:

答案 0 :(得分:0)

这里有一个可以使用正则表达式的可行解决方案:

Add-Type -AssemblyName Microsoft.Office.Interop.Excel

$excel               = New-Object -ComObject Excel.Application
$excel.Visible       = $True
$excel.DisplayAlerts = $False 

$workbook            = $excel.Workbooks.Open( "C:\Users\john\Desktop\wb.xlsx", [System.Type]::Missing, $false ) 

$worksheet = $workbook.WorkSheets.item("Sheet1")
[void]$worksheet.activate()

$searchRange = $worksheet.Range("A:A").EntireColumn
$searchFor   = '^.*B\-.*$'

$foundCell   = $null
foreach( $cell in $searchRange.Cells ) {

    if( $cell.Value2 -match $searchFor ) {
        $foundCell = $cell
        break
    }
}

if( $foundCell ) {
   $foundCell.Value2
}

[void]$workbook.Close() 
[void]$excel.Quit() 

[System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel) | Out-Null