Powershell excel replace всегда возвращает true - PullRequest
0 голосов
/ 04 июля 2018

Я выполняю поиск и замену целой пачки файлов Excel (чтобы обновить некоторые ссылки, которые были перемещены) Я хочу отследить, в какие файлы были внесены изменения, однако результат замены всегда верен, независимо от того, был ли требуемый текст. Найти как это: $worksheet.UsedRange.Find($Text) либо возвратит ноль, если искомый текст не существует, либо объект, если он существует, но это существенная дополнительная обработка, которую я предпочел бы удалить, учитывая, что у меня есть около 1,2 миллиона файлов для проверки. Вот мой код замены:

$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
        }
    } 
}

Ответы [ 2 ]

0 голосов
/ 07 июля 2018

Похоже, Тео прав в этом. Я не нашел в любом случае, чтобы повысить эффективность путем удаления найти. Также кажется, что в некоторых файлах замена заменяет только первый экземпляр, и поэтому также необходим цикл.

0 голосов
/ 05 июля 2018

Может быть попробовать

$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
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...