У нас есть огромная папка с офисными документами на нашем сервере. ИТ- отдел хочет изменить имя папки с Mehper_repository
на Planning_reports
. Поскольку большинство файлов Excel в подпапках связаны друг с другом, мне нужно найти и заменить содержимое каждой ячейки, содержащее \\FileSrv\Mehper_repository\
на \\FileSrv\Planning_reports\
. Проблема в том, что программа поиска / замены Excel может выполнять поиск только в пределах листа или рабочей книги. Как я могу искать в папке / подпапках, просто просматривая формулы, и заменить это выражение?
3 ответа
Макро подход:
Я не могу ответить на этот вопрос точно, но как насчет использования макропрограммы, поэтому единственное, что вам нужно сделать, это открыть файлы один за другим и запустить макрос? Это может быть выполнимо, если коллекция не слишком велика, если нет, вам, вероятно, придется придумать программирование нестандартного решения ...
Программирование специального автоматического решения:
Основываясь на ответе А. Сканелли, вы можете взять ваш любимый язык .NET и сделать (примеры на C #):
- Рекурсивно перечислять подкаталоги.
- Перечислите каждый файл во всех найденных каталогах, отфильтруйте по расширению Excel.
- Автоматизируйте Microsoft Excel следующим образом: http://support.microsoft.com/kb/302084
- И заменить текст следующим образом: Как я могу заменить текст в электронной таблице Excel?
Псевдокод:
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 открытым в течение всего алгоритма, просто «открывайте, заменяйте и закрывайте» во внутреннем цикле.
Составляя ответ TomWij, переберите все ячейки, ищите ссылки на "\FileSrv\Mehper_repository\" и замените на "\FileSrv\Planning_reports\". Возможно, вы сможете использовать коллекцию Cells, чтобы сделать это быстрее, но это может привести к неправильному использованию формул (тем более, что эта строка не будет изолирована).
Попробуйте спросить о написании VBA, подобном этому, в StackOverflow, у вас больше шансов получить ответ, связанный с программированием, чем в SuperUser.
Я бы предложил коммерческий продукт PowerGREP :
PowerGREP - это мощный инструмент Windows grep. Быстрый поиск по большому количеству файлов на вашем ПК или в сети, включая текстовые и двоичные файлы, сжатые архивы, документы MS Word, электронные таблицы Excel, файлы PDF, файлы OpenOffice и т.д. Найдите нужную информацию с помощью мощных текстовых шаблонов (регулярные выражения) указав форму того, что вы хотите, вместо буквального текста. Поиск и замена одним или несколькими регулярными выражениями для всестороннего ведения веб-сайтов, исходного кода, отчетов и т.д. Извлечение статистики и знаний из файлов журналов и больших наборов данных.