Массовое переименование папок Outlook с использованием строк замены - PullRequest
0 голосов
/ 06 марта 2019

Передо мной стоит крупный проект по импорту и реорганизации около 50 pst архивов Outlook (вероятно, около 100-200 ГБ) в единый библиотечный аккаунт моей транспортно-экспедиторской компании.

Я использую компьютер Windows 10 Pro с установленным Office 365 Business Premium на локальном компьютере, а Outlook использует текущую версию «Exchange Online» 15.20.xxxx.xx, поэтому все доступно в облаке.

Импорт архивов не является проблемой.

Моя проблема заключается в необходимости переименовать несколько тысяч папок Outlook, чтобы они были организованы!

Конечная цель - переименовать все папки электронной почты, начиная с полного номера файла, установленного программным обеспечением нашей компании для этой поставки:

CHI-AE0xxxxx (air export)
CHI-AI0xxxxx (air import)
CHI-OE0xxxxx (ocean export)
CHI-OI0xxxxx (ocean import)
CHI-DO0xxxxx (domestic)

где x являются числовыми и теперь должны быть 6 цифрами

До сих пор не было структуры именования, поэтому каждый использует то, что имело смысл в своем личном мозгу. Вот несколько примеров:

CHOIxxxxx
CHOI0xxxxx
CHIOIxxxxx
CHIOI0xxxxx

или просто ххххх (я буду знать, какой префикс нужен для прикрепления к папкам этого человека)

Итак, в основном я хочу заменить «CHOI» или «CHIOI» на «CHI-OI», а затем, если есть 5 цифр, превратить его в 6 цифр с начальным 0.

У меня большой опыт работы с Excel VBA и макросами. Я довольно хорошо использую Powershell с базами данных Excel и SQL Server.

У меня нет опыта работы с Outlook и / или попытками манипулировать им с помощью внешних инструментов, таких как VBA или Powershell, но я готов учиться!

1 Ответ

0 голосов
/ 07 марта 2019

Оказывается, Outlook VBA был подходом для этой задачи.

Вчера я наконец нашел отличный ответ:

https://www.datanumen.com/blogs/batch-find-replace-specific-words-outlook-folder-names/

Мне пришлось изменитьнемного код, заменив:

Set objFolders = Outlook.Application.Session.Folders("Personal").Folders

Таким образом, он ищет / изменяет только подпапки в папке, которую я выбрал в настоящее время:

Set objFolders = Outlook.Application.ActiveExplorer.CurrentFolder.Folders

Вот (почти) готовый код:

Public strFind, strReplace As String

Sub FindReplaceWordsinFolderNames()

    Dim objFolders As Outlook.Folders
    Dim objFolder As Outlook.Folder

    Set objFolders = Application.ActiveExplorer.CurrentFolder.Folders

    'You need to input the specific words for find and replace
    strFind = InputBox("Enter the specific words you want to change.")
    strReplace = InputBox("Enter the specific words you want to change to. (Case Sensitive)")

    For Each objFolder In objFolders
        Call ProcessFolders(objFolder)
    Next

    MsgBox "Complete!", vbExclamation, "Rename Folders"

End Sub

Private Sub ProcessFolders(ByVal objCurrentFolder As Outlook.Folder)
    Dim objSubfolder As Outlook.Folder

    On Error Resume Next
    If InStr(LCase(objCurrentFolder.Name), LCase(strFind)) > 0 Then
       'Find and replace the specific words
       objCurrentFolder.Name = Replace(LCase(objCurrentFolder.Name), LCase(strFind), strReplace)
    End If

    'Process all folders recursively
    If objCurrentFolder.Folders.Count > 0 Then
       For Each objSubfolder In objCurrentFolder.Folders
           Call ProcessFolders(objSubfolder)
       Next
    End If
End Sub

У него нет проверки ошибок, поэтому, если я нажму кнопку "Отмена" в поле ввода или оставлю поле пустым, и нажму "ОК", макрос будет действовать как "" - это strFind, поэтому он поворачивает все папкиимена в нижнем регистре, lol.

Я думаю, что добавление этого сразу после того, как 2 поля ввода решат это, но я проверю это завтра:

    If strFind = "" Or strReplace = "" Then
        Exit Sub
    End If

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

После просмотра и использования этого я разработал еще один макрос для пакетного перемещения всегоиз выбранной директории в любую папку, в которую я хочу объединить их ... для создания моей истинной библиотеки файлов, но это другая тема, так что, я полагаю, вы не хотите, чтобы это было опубликовано здесь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...