Я пытаюсь написать скрипт powershell, который найдет и заменит одну строку другой строкой во всех файлах Excel в каталоге. Когда я запускаю код ниже, я получаю ошибки, показанные ниже кода. Первый говорит, что он не может найти имя файла, но файл, очевидно, там или он не будет знать имя. Есть идеи?
$object = New-Object -comObject Shell.Application
$folder = $object.BrowseForFolder(0, 'Select the folder', 0)
$oldname = Read-Host 'Enter your old string to search for'
$newname = Read-Host 'Enter your new string'
if (!$folder -or !$oldname -or !$newname) {exit}
$excel = New-Object -comObject Excel.Application
$excel.Visible = $true
$excel.DisplayAlerts = $true
foreach ($file in Get-ChildItem -literalPath $folder.self.Path*.xlsx) {
$workbook = $excel.Workbooks.Open($file.name)
foreach ($sheet in $workbook.Sheets) {
foreach ($cell in $sheet) {
$cell.Address = $cell.Address -replace $oldname, $newname
}
}
$workbook.Save()
$workbook.Close()
}
$excel.quit()
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($workbook)
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel)
[System.GC]::Collect()
[System.GC]::WaitForPendingFinalizers()
Read-Host -Prompt "Press Enter to exit"
Извините, мы не смогли найти testDo c .xlsx. Возможно ли это было перемещено, переименовано или удалено? В C: \ Users \ KAbernathy \ Documents \ replaceTest3.ps1: 13 char: 5 + $ workbook = $ excel.Workbooks.Open ($ file.name) + ~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo: OperationStopped: (:) [], COMException + FullyQualifiedErrorId: System.Runtime .InteropServices.COMException
Нельзя вызвать метод для выражения с нулевым значением. В C: \ Users \ KAbernathy \ Documents \ replaceTest3.ps1: 20 char: 5 + $ workbook.Save () + ~~~~~~~~~~~~~~~~ + CategoryInfo: InvalidOperation: ( :) [], RuntimeException + FullyQualifiedErrorId: InvokeMethodOnNull
Вы не можете вызвать метод для выражения с нулевым значением. В C: \ Users \ KAbernathy \ Documents \ replaceTest3.ps1: 21 символ: 5 + $ workbook.Close () + ~~~~~~~~~~~~~~~~~ + CategoryInfo: InvalidOperation: (:) [], RuntimeException + FullyQualifiedErrorId: InvokeMethodOnNull
Исключение, вызывающее «ReleaseComObject» с аргументом «1»: «Ссылка на объект не установлена на экземпляр объекта.» В C: \ Users \ KAbernathy \ Documents \ replaceTest3.ps1: 25 char: 1 + [System.Runtime.Interopservices.Marshal] :: ReleaseComObject ($ workbook) + ~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~ + CategoryInfo: NotSpecified: (:) [], MethodInvocationException + FullyQualifiedErrorId: NullReferenceException