4

У нас есть огромная папка с офисными документами на нашем сервере. ИТ- отдел хочет изменить имя папки с Mehper_repository на Planning_reports . Поскольку большинство файлов Excel в подпапках связаны друг с другом, мне нужно найти и заменить содержимое каждой ячейки, содержащее \\FileSrv\Mehper_repository\ на \\FileSrv\Planning_reports\ . Проблема в том, что программа поиска / замены Excel может выполнять поиск только в пределах листа или рабочей книги. Как я могу искать в папке / подпапках, просто просматривая формулы, и заменить это выражение?

3 ответа3

3

Макро подход:

Я не могу ответить на этот вопрос точно, но как насчет использования макропрограммы, поэтому единственное, что вам нужно сделать, это открыть файлы один за другим и запустить макрос? Это может быть выполнимо, если коллекция не слишком велика, если нет, вам, вероятно, придется придумать программирование нестандартного решения ...


Программирование специального автоматического решения:

Основываясь на ответе А. Сканелли, вы можете взять ваш любимый язык .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 открытым в течение всего алгоритма, просто «открывайте, заменяйте и закрывайте» во внутреннем цикле.

3

Составляя ответ TomWij, переберите все ячейки, ищите ссылки на "\FileSrv\Mehper_repository\" и замените на "\FileSrv\Planning_reports\". Возможно, вы сможете использовать коллекцию Cells, чтобы сделать это быстрее, но это может привести к неправильному использованию формул (тем более, что эта строка не будет изолирована).

Попробуйте спросить о написании VBA, подобном этому, в StackOverflow, у вас больше шансов получить ответ, связанный с программированием, чем в SuperUser.

2

Я бы предложил коммерческий продукт PowerGREP :

PowerGREP - это мощный инструмент Windows grep. Быстрый поиск по большому количеству файлов на вашем ПК или в сети, включая текстовые и двоичные файлы, сжатые архивы, документы MS Word, электронные таблицы Excel, файлы PDF, файлы OpenOffice и т.д. Найдите нужную информацию с помощью мощных текстовых шаблонов (регулярные выражения) указав форму того, что вы хотите, вместо буквального текста. Поиск и замена одним или несколькими регулярными выражениями для всестороннего ведения веб-сайтов, исходного кода, отчетов и т.д. Извлечение статистики и знаний из файлов журналов и больших наборов данных.

образ

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .