Скопируйте содержимое Word в Outlook

У меня есть документ Word с форматированным текстом, изображениями и таблицами. Вы можете вручную скопировать его содержимое и без проблем вставить в Outlook. Как это сделать на Python?

Мой код:

import win32com.client

word = win32com.client.Dispatch("Word.Application")
doc = word.Documents.Open(your_doc_path)
contents = 'What here?'  # doc.Content?

outlook = win32com.client.Dispatch("Outlook.Application")
# Create a new MailItem object
msg = outlook.CreateItem(0)

msg.Body = 'What here?'  # `contents` throws pywintypes.com_error
msg.Display(False)

Ближайшие проблемы:

Копировать формат Word в сообщение Outlook

Содержание текстового документа как тела сообщения электронной почты

Как вставить в Outlook из Microsoft Word

Экспорт отформатированного текста для просмотра и сохранения форматирования

Не работает:

1-Сохранение документа Word в формате HTML (аналогично RTF) и

with open(html_path, 'r', errors='ignore') as f:
    # Possible UnicodeDecodeError
    doc_body = f.read()

    msg.BodyFormat = 2  # olFormatHTML
    msg.Body = doc_body

2-Чтение document.xml в заархивированном документе Word.

Возможный способ:

Свойство WordEditor класса Inspector возвращает экземпляр документа Word, который представляет тело сообщения.

Как применить WordEditor через win32com?


person Max    schedule 12.10.2018    source источник
comment
Мне удалось скопировать содержимое файла RTF, но без изображений. и столы сдвинуты. Для этого откройте файл в режиме 'rb' и установите msg.BodyFormat = 3 # olFormatRichText   -  person Max    schedule 13.10.2018


Ответы (2)


Вот окончательное решение с помощью Алины Ли:

import win32com.client

word = win32com.client.Dispatch("Word.Application")
doc = word.Documents.Open(word_path)
doc.Content.Copy()
doc.Close()

outlook = win32com.client.Dispatch("Outlook.Application")
# Create a new MailItem object
msg = outlook.CreateItem(0)
msg.GetInspector.WordEditor.Range(Start=0, End=0).Paste()

msg.Display(False)

Изображения, таблицы, формат - все хорошо.

person Max    schedule 15.10.2018
comment
Убедитесь, что приложение Outlook открыто при запуске этого кода. - person Max; 15.10.2018

Вы можете скопировать содержимое Word в Outlook с помощью следующего кода:

import win32com.client
app=win32com.client.Dispatch('Word.Application')
doc=app.Documents.Open(r'D:\winGUI\test\1.doc')
doc.Content.Copy()
doc.Close()

Вставить с помощью метода Paste ()

person Alina Li    schedule 15.10.2018
comment
Используете Paste() метод какого объекта? msg.Body.Paste() рейзит AttributeError: 'str' object has no attribute 'Paste' - person Max; 15.10.2018
comment
Я понял. Это msg.GetInspector.WordEditor.Range(0).Paste(). - person Max; 15.10.2018