首页 > 解决方案 > Powershell excel替换总是返回true

问题描述

我在一大堆excel文件中进行了查找和替换(以更新一些已移动的链接)我想跟踪哪些文件对它们进行了更改,但是无论是否需要文本,替换的结果总是正确在那里。像这样的查找: $worksheet.UsedRange.Find($Text) 如果正在查找的文本不存在,则返回 null,如果存在,则返回对象,但鉴于我有大约 120 万个文件要检查,我宁愿删除重要的额外处理。这是我的替换代码:

$found=$false  
$xlCalculationManual = -4135
$excel = New-Object -comobject Excel.Application
$excel.visible = $false
$excel.AskToUpdateLinks = $false
$excel.DisplayAlerts = $false
$excel.EnableEvents = $false
$workbook=$excel.Workbooks.Open($openfile,0,$false,5,"nopassword","nopassowrd")
$excel.Calculation = $xlCalculationManual
foreach ($worksheet in $workbook.Sheets) 
{
    foreach ($Text in $FindText)
    {
        If ($worksheet.UsedRange.replace($Text,$ReplaceText))
        {
            $found=$true
        }
    } 
}

标签: powershell

解决方案


也许试试

$worksheet.UsedRange.replace($Text,$ReplaceText)

If ($?)

代替

If ($worksheet.UsedRange.replace($Text,$ReplaceText))

或者您可以尝试搜索文本,并确认它找到了什么?

在您的 if replace 选项之前,请尝试(我很抱歉,但此代码是推测,可能无法完全修复它。https://msdn.microsoft.com/en-us/vba/excel-vba上有一篇关于此的文章/articles/range-find-method-excel

$confirm = $worksheet.Used.Range.find($text)
if ($confirm -ne $null) {
    Echo $true
    $worksheet.UsedRange.replace($Text,$ReplaceText)
    $confirm = $null
}
else{
    echo $false
}

推荐阅读