Passei muito tempo com isso, mas acho que finalmente consegui uma solução :)
Faça o download do script do PowerShell e execute-o. Ele pede uma pasta. Escolha uma pasta com quantos arquivos do Excel você quiser. Em seguida, você precisa inserir sua string de pesquisa antiga e sua nova string de substituição. Em seguida, ele substituirá todos os hiperlinks em todos os arquivos selecionados usando sua pesquisa & substitua strings.
→
Como funciona em pouco tempo
- Solicitar pasta
- Solicitar uma string de pesquisa antiga
- Solicitar nova string de substituição
- Faz um loop por todos os arquivos XLS, XLSX, XLSB ou qualquer que seja a expressão regex
.*XLS?
corresponde
- Fazer um loop em todas as folhas da pasta de trabalho atual
- Fazer um loop em todos os hiperlinks da planilha atual
- Tente substituir o endereço do hiperlink (não diferencia maiúsculas de minúsculas)
- Salve a pasta de trabalho atual
- Fechar tudo se terminar
Código
$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 = $false
$excel.DisplayAlerts = $false
foreach ($file in Get-ChildItem -literalPath $folder.self.Path*.xls?) {
$workbook = $excel.Workbooks.Open($file.name)
foreach ($sheet in $workbook.Sheets) {
foreach ($cell in $sheet.Hyperlinks) {
$cell.Address = $cell.Address -ireplace $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()
Por favor, teste-o