是否有工具/技术可以更新多个 MS Excel 文件的内部超链接以指向新服务器?

是否有工具/技术可以更新多个 MS Excel 文件的内部超链接以指向新服务器?

我们正在将大量文件共享合并为一个,并且有数千个 MS Excel(更不用说 Access 和 Word)文件,这些文件包含指向其他工作表的各种链接。其中一些是相对于文件位置引用的,而另一些则包含引用工作簿的完整路径(即 I:/PUBLIC/username/file.xls)。

我们已经使用一些自制程序扫描了我们的服务器,以检测具有有效链接的文件,但如果可能的话,我们希望避免编写我们自己的代码来进行批量更新来更改链接。

有没有人使用过任何工具或技术来迁移此类大量文件?我在谷歌上找到了 ExcelPipe (http://www.datamystic.com/excelpipe.html),但是他们的网站和我无法找到的产品评论让我充满信心。

答案1

有许多可用的工具:

还有许多其他的。请备份并测试一下。

我编写了一个 VBA 脚本,列出了给定文件夹中的所有文件及其链接,对于这样的任务可能很有用。

答案2

我花了太多时间在这上面,但我想我终于找到解决方案了:)

下载Powershell 脚本并运行它。它会要求您提供一个文件夹。选择一个包含任意数量的 Excel 文件的文件夹。接下来,您必须输入旧的搜索字符串和新的替换字符串。然后,它将使用您的搜索和替换字符串替换所有选定文件中的所有超链接。

在此处输入图片描述在此处输入图片描述

简要介绍

  1. 询问文件夹
  2. 询问旧的搜索字符串
  3. 要求更换新琴弦
  4. 循环遍历每个 XLS、XLSX、XLSB 文件或正则表达式.*XLS?匹配的任何内容
  5. 循环遍历当前工作簿中的每个工作表
  6. 循环遍历当前工作表中的每个超链接
  7. 尝试替换超链接地址(不区分大小写)
  8. 保存当前工作簿
  9. 如果完成则关闭所有内容

代码

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

请测试一下

相关内容