Outlook VBA: кодировка файлов, сохраненых через макрос

Узнай цену своей работы

Формулировка задачи:

Здравствуйте уважаемые, В VBA относительно новичок. Работаю над макросом, сохраняющем письма с вложениями на жесткий диск. Письма сохраняются в таком порядке:
  1. Вложения;
  2. письмо в формате .txt
  3. письмо в формате .msg
Причем предпочтительно сохранять только вложения и письма в формате .txt. Сохранение писем в формате .msg мера принудительная, ввиду величины файла, содержащего все вложения + трудности извлечения полезной информации. Суть проблемы: при сохранении письма в формате .txt через макрос из MS Outlook 2007, файл сохраняется в кодировке ANSI, и все символы UTF-8 заменяются на "?". Причем, проблема проявилась после перехода с MS Outlook 2003. Сий (старый добрый) клиент символы UTF-8 заменял соответсвующими кодами типа ê ;, что позволяло восстановить читабельный текст в процессе дальнейшей обработки. Вопрос: как управлять кодировкой файла, создаваемого через макрос VBA, т.е. как сохранить .txt в UTF-8? Как вариант, как пи сохранении заменить символы UTF-8 на коды соответствующих символов по типу MS Outlook 2003? Код VBA:
Листинг программы
  1. Sub SaveFolderToHDD(myItem As Outlook.MailItem)
  2. ...
  3. Const sPATH0 As String = "C:\Temp\Outlook_Items"
  4. Const OLTXT = 0
  5. ...
  6. miItem.SaveAs sPath_i & "RawData#" & ".msg" ', olMSG
  7. miItem.SaveAs sPath_i & "SvMsg#" & ".txt", OLTXT
  8. ...
  9. End Sub

Решение задачи: «Outlook VBA: кодировка файлов, сохраненых через макрос»

textual
Листинг программы
  1. Sub SaveFolderToHDD(myItem As Outlook.MailItem)
  2.      ...
  3.      Const sPATH0 As String = "C:\Temp\Outlook_Items"
  4.      Const OLTXT = 0
  5.      ...
  6.      miItem.SaveAs sPath_i & "RawData#" & ".msg"   ', olMSG
  7.     miItem.SaveAs sPath_i & "SvMsg#" & ".txt", OLTXT
  8.  
  9.      Call ChangeFileCharset(sPath_i & "SvMsg#" & ".txt", "UTF-8", "ANSI")
  10.  
  11.      ...
  12. End Sub
  13.  
  14.  
  15.  
  16. Function ChangeFileCharset(ByVal namef$, ByVal DestCharset$, _
  17.                            Optional ByVal SourceCharset$) As Boolean
  18.  
  19.     On Error Resume Next: Err.Clear
  20.     With CreateObject("ADODB.Stream")
  21.         .Type = 2
  22.         If Len(SourceCharset$) Then .Charset = SourceCharset$    ' указываем исходную кодировку
  23.        .Open
  24.         .LoadFromFile namef$    ' загружаем данные из файла
  25.        FileContent$ = .ReadText   ' считываем текст файла в переменную FileContent$
  26.        .Close
  27.         .Charset = DestCharset$    ' назначаем новую кодировку
  28.        .Open
  29.         .WriteText FileContent$
  30.         .SaveToFile namef$, 2   ' сохраняем файл уже в новой кодировке
  31.        .Close
  32.     End With
  33.     ChangeFileCharset = Err = 0
  34. End Function

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 4.167 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы