Dê uma olhada no módulo ImportExcel . Ele pode importar e exportar dados do Excel diretamente, por isso é muito mais rápido e confiável do que usar objetos COM.
Estamos fazendo uma reorganização de unidade de rede compartilhada. Isso quebrará os links em centenas de gigabytes de arquivos do Excel usados pela empresa. Para suavizar o golpe, criei um script Powershell que automaticamente religa esses arquivos. No entanto, ele é executado super lento em apenas cerca de 1 MB por minuto. Levaria vários meses para vincular novamente todos os arquivos do Excel. Por enquanto, estou pedindo à empresa que restrinja a quantidade de dados que estão solicitando para vincular, mas quanto mais rápido eu conseguir executar o script, mais feliz será o negócio. Atualmente é perfeitamente funcional, apenas lento. Alguém tem algum conselho de como eu posso acelerar este script Powershell? Qualquer feedback seria apreciado.
$object = New-Object -comObject Shell.Application
$folder = $object.BrowseForFolder(0, 'Select the folder where your Excel files are located', 0)
$oldname = "oldname"
$newname = "newname"
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.fullname)
foreach ($link in $workbook.LinkSources(1))
{
write-host Old link: $link
$newlink = $link -ireplace [regex]::Escape($oldname), $newname
if (Test-Path $newlink) {
write-host New link: $newlink
$workbook.ChangeLink($link,$newlink,1)
}
else {
write-host New link does not exist: $newlink
}
}
$workbook.Save()
$workbook.Close()
}
$excel.quit()
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($workbook)
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel)
[System.GC]::Collect()
[System.GC]::WaitForPendingFinalizers()
Dê uma olhada no módulo ImportExcel . Ele pode importar e exportar dados do Excel diretamente, por isso é muito mais rápido e confiável do que usar objetos COM.