如何同时查找和替换多个 Excel 文件中的链接路径

如何同时查找和替换多个 Excel 文件中的链接路径

我们的服务器上有一个包含办公文档的巨大文件夹。IT 想要将文件夹的名称从 更改为Mehper_repositoryPlanning_reports由于子文件夹中的大多数 Excel 文件都相互链接,因此我需要查找并替换包含 的每个单元格内容\\FileSrv\Mehper_repository\\\FileSrv\Planning_reports\问题是,Excel 的查找/替换实用程序只能在工作表或工作簿中搜索。我如何才能在文件夹/子文件夹中搜索公式并替换该表达式?

答案1

我建议商业产品电力GREP

PowerGREP 是一款功能强大的 Windows grep 工具。快速搜索 PC 或网络上的大量文件,包括文本和二进制文件、压缩档案、MS Word 文档、Excel 电子表格、PDF 文件、OpenOffice 文件等。使用强大的文本模式(正则表达式)指定您想要的形式而不是文字文本来查找您想要的信息。搜索和替换使用一个或多个正则表达式来全面维护网站、源代码、报告等。从日志文件和大型数据集中提取统计数据和知识。

图像

答案2

以 TomWij 的答案为基础,循环遍历所有单元格,查找对“\FileSrv\Mehper_repository\”的引用,并将其替换为“\FileSrv\Planning_reports\”。您可能能够使用 Cells 集合来更快地完成此操作,但这可能会以不良方式弄乱公式(尤其是因为该字符串不会被隔离)。

尝试在 StackOverflow 上询问有关编写 VBA 的问题,与在 SuperUser 上相比,您更有可能在那里获得与编程相关的回复。

答案3

宏观方法:

我无法准确回答这个问题,但是如果使用宏程序,你唯一要做的就是逐个打开文件并运行宏,那会怎么样?如果集合不是太大,这可能是可行的,如果不是,你可能不得不想出一个自定义解决方案的编程...


编写自定义自动解决方案:

根据 A. Scagnelli 的回答,你可以采用自己喜欢的 .NET 语言并执行(C# 示例):

伪代码:

openExcel

// Fills the list recursively with aboslute paths of the subfolders of path.
enumerateFolder(list, path)

// Enumerate paths. 
foreach(path in list)
{
   // Enumerate files
   foreach(file in path)
   {
      openFileInExcel
      replaceFileContents
      closeFileInExcel
   }
}

closeExcel

解释:

递归调用时,只需传递父目录的路径和列表的引用即可。这样,您就可以获得可以在双循环中枚举文件的文件夹列表。

在整个算法过程中保持 Excel 打开,只需在内部循环中“打开、替换和关闭”即可。

相关内容