使用PowerShell在Excel中查找和替换

时间:2019-02-13 17:26:54

标签: excel powershell

我有一列包含计算机名称,但是名称的格式类似于此域\计算机名称。通常在Excel中,我可以使用find / replace并搜索* \并用空格替换,仅保留计算机名称。我有一个发现* \的powershell脚本,但是它完全替换了整个单元格。这就像在搜索任何包含* \的单元格并将其替换,而不仅仅是保留计算机名称一样。

$file = "C:\reports\report.xls"
$Excel = New-Object -ComObject Excel.Application
$Excel.Visible = $true
$Workbok = $Excel.workbooks.open($file)
$Worksheets = $Workbook.worksheets
$Worksheet = $Workbook.Worksheets.Item(1)
$Worksheet = $Workbok.Worksheets.Item(1)
$SearchString = "*\"
$Range = $Worksheet.Range("A1").EntireColumn
$Search = $Range.find($SearchString)
if($search -ne $null){
$FirstAddress = $Search.Address
do{
$Search.value() = ""
$search = $Range.FindNext($search)
}while ($search -ne $null -and $search.Address -ne $FirstAddress)

1 个答案:

答案 0 :(得分:0)

在您的Do-While循环中,您要获取搜索值并将其设置为空字符串。 $Search.value() = ""。如果您对此进行了更改并进行了类似$search.Value() = $Search.value() -replace "^.*\\",''的更改,则它应该可以工作。我使用-replace和一些正则表达式替换了从反斜杠到行首的所有内容。

稍微清理一下代码,因为似乎您的变量拼写错误

$file = "C:\reports\report.xls"
$Excel = New-Object -ComObject Excel.Application
$Excel.Visible = $true
$Workbook = $Excel.workbooks.open($file)
$Worksheet = $Workbook.Worksheets.Item(1)
$SearchString = "*\"
$Range = $Worksheet.Range("A1").EntireColumn
$Search = $Range.find($SearchString)
if ($search -ne $null) {
    $FirstAddress = $Search.Address
    do {
        $search.Value() = $Search.value() -Replace "^.*\\", ''  
        $search = $Range.FindNext($search)
    } while ($search -ne $null -and $search.Address -ne $FirstAddress)
}