Powershell 中 Excel 重新链接的性能问题

Powershell 中 Excel 重新链接的性能问题

我们正在重组共享网络驱动器。这将破坏企业使用的数百 GB Excel 文件中的链接。为了减轻影响,我创建了一个 Powershell 脚本,可以自动重新链接这些文件。但是,它运行速度非常慢,每分钟只有 1 MB 左右。重新链接所有 Excel 文件需要几个月的时间。目前,我要求企业限制他们要求重新链接的数据量,但是,我的脚本运行得越快,企业就越高兴。它目前功能完好,只是速度很慢。有人对我如何加快这个 Powershell 脚本有什么建议吗?任何反馈都将不胜感激。

$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() 

答案1

看看导入Excel模块。它可以直接从 Excel 导入和导出数据,因此比使用 COM 对象更快、更可靠。

相关内容