У нас есть огромная папка, содержащая офисные документы о нашем сервере. IT хочет изменить имя папки от Mehper_repository
кому: Planning_reports
. Так как большинство файлов Excel в подпапках связано друг с другом, я должен найти и заменить каждое содержание ячейки, содержащее \\FileSrv\Mehper_repository\
кому: \\FileSrv\Planning_reports\
. Проблема, утилита Find/Replace Excel может искать только в Листе или Рабочей книге. Как я могу искать в папке/подпапках, просто смотрящей в Формулах, и заменить то выражение?
Я предложил бы коммерческий продукт PowerGREP:
PowerGREP является мощным Windows grep инструмент. Быстро переройте большие количества файлов на Вашем ПК или сети, включая текстовые и двоичные файлы, сжатые архивы, документы MS Word, электронные таблицы Excel, файлы PDF, файлы OpenOffice, и т.д. Найдите информацию, которую Вы хотите с мощными текстовыми шаблонами (регулярные выражения), указывающие форму того, что Вы хотите вместо буквенного текста. Поиск и замена одним или несколькими регулярными выражениями для всестороннего поддержания веб-сайтов, исходного кода, отчетов, и т.д. Статистика извлечения и знание из файлов журналов и больших наборов данных.
Создавая от ответа TomWij, цикла через все ячейки, ища ссылки на "\FileSrv\Mehper_repository \" и замена "\FileSrv\Planning_reports \". Вы смогли использовать набор Ячеек, чтобы сделать это быстрее, но это могло бы слоняться без дела с формулами плохими способами (тем более, что та строка не будет изолирована).
Попытайтесь спросить о записи VBA как это на StackOverflow, Вы, более вероятно, получите связанный с программированием ответ там, чем на SuperUser.
Макро-подход:
Я не могу ответить на это точно, но что относительно того, чтобы использовать макро-программу так единственная вещь необходимо ли сделать, действительно ли открытие является файлами один за другим и выполнением макроса? Это могло бы быть выполнимо, если количество не является слишком большим, в противном случае необходимо будет, вероятно, придумать программирование настраиваемого решения...
Программирование пользовательского автоматического решения:
Создание от 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 открытым во время целого алгоритма, просто 'открытого, замена и близко' во внутреннем цикле.