Como localizar e substituir caminhos de link em vários arquivos do Excel de uma só vez

4

Temos uma pasta enorme contendo documentos do Office em nosso servidor. A TI deseja alterar o nome da pasta de Mehper_repository para Planning_reports . Como a maioria dos arquivos do Excel nas subpastas estão vinculados uns aos outros, eu preciso encontrar e substituir cada conteúdo de célula contendo \FileSrv\Mehper_repository\ to \FileSrv\Planning_reports\ . O problema é que o utilitário Localizar / Substituir do Excel pode pesquisar somente em Planilha ou Pasta de Trabalho. Como posso pesquisar em uma pasta / subpasta procurando em Fórmulas e substituir essa expressão?

    
por Mehper C. Palavuzlar 10.12.2009 / 11:01

3 respostas

2

Sugiro o produto comercial PowerGREP :

PowerGREP is a powerful Windows grep tool. Quickly search through large numbers of files on your PC or network, including text and binary files, compressed archives, MS Word documents, Excel spreadsheets, PDF files, OpenOffice files, etc. Find the information you want with powerful text patterns (regular expressions) specifying the form of what you want, instead of literal text. Search and replace with one or many regular expressions to comprehensively maintain web sites, source code, reports, etc. Extract statistics and knowledge from logs files and large data sets.

    
por 11.08.2010 / 13:47
3

Desenvolvendo a resposta de TomWij, percorra todas as células, procurando por referências a "\ FileSrv \ Mehper_repository \" e substitua por "\ FileSrv \ Planning_reports \". Você pode usar a coleção Cells para fazer isso mais rápido, mas isso pode prejudicar as fórmulas de maneira ruim (especialmente porque essa string não será isolada).

Tente perguntar sobre como escrever VBA assim no StackOverflow, é mais provável que você receba uma resposta relacionada à programação do que no SuperUser.

    
por 10.08.2010 / 21:21
3

Uma abordagem macro:

Eu não posso responder isso exatamente, mas e quanto a usar um programa de macro, então a única coisa que você precisa fazer é abrir os arquivos um a um e executar a macro? Isso pode ser viável se a coleção não for muito grande, senão você provavelmente terá que criar uma solução personalizada ...

Programando uma solução automática personalizada:

Desenvolvendo a resposta de A. Scagnelli, você pode usar sua linguagem .NET favorita (exemplos C #):

  • Recursivamente enumerar subdiretórios .
  • Enumere cada arquivo em todos os diretórios encontrados, filtre na extensão excel.
  • Automatize o Microsoft Excel desta forma: link
  • E substitua o texto desta forma:

Pseudo-código:

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

Explicação:

Basta passar o caminho para o diretório pai e uma referência a uma lista quando você os chamar recursivamente. Isso permite que você obtenha uma lista de pastas cujos arquivos você pode enumerar em um loop duplo.

Deixe o Excel aberto durante todo o algoritmo, apenas 'abra, substitua e feche' no loop interno.

    
por 10.08.2010 / 21:16