Я пытаюсь прочитать текстовый файл, который отформатирован как электронная таблица, в список, а затем использовать параметры из указанных столбцов в качестве полей слияния и вставить их в документ шаблона слова с помощью Python.Однако я получаю TypeError, говорящую: «Объекты типа« MailMerge »не могут быть преобразованы в Unicode при попытке печати документов с помощью win32api.ShellExecute (). Обычно мы делаем этот процесс вручную: сортируем основной текстовый файл на три других на основеЕсли у участников 15 дней, 25 дней или 30 дней с просрочкой платежа, используйте слияние слов в слове, чтобы выбрать этот текстовый файл в качестве списка получателей. Я написал этот код в примере отдельно от основной программы, чтобыПолучите механику, работающую, прежде чем собрать ее вместе.
В основной программе у меня завершена функция сортировки. Я также смог использовать document.merge () и вставить информацию в один документ. Однако сделать это для несколькихстраниц в одном документе мне нужно использовать MailMerge () и передать его словари в качестве аргументов. Я пытался использовать цикл for с соответствующими индексами строк в качестве значений для ключей, но так как эта функция требует более одного словаря, он не работал.затем придумал использовать цикл для вставки каждого члена иих информация в одно слияние, записать его в выходной файл, распечатать этот выходной файл, и делать это для каждого члена, пока не будет сделано.Я попытался использовать win32api.ShellExecute (0, "print", document, '/ d: "% s" "% win32print.GetDefaultPrinter (),". ", 0), но получил ошибку, указанную выше.Единственный другой метод печати, с которым я столкнулся, - это преобразование его в pdf, но я также не хочу терять текст и форматирование документа.
from __future__ import print_function
from mailmerge import MailMerge
import os
import win32api
import win32print
# Formatting the list so that the indices match the columns in the text
doc.
text_file = open('J:\cpletters15.txt')
courtesy_pay_list = text_file.readlines()
text_file.close()
delimeted_text = [line.split('\t') for line in courtest_pay_list]
# Opening the template
template = 'J:\courtesy_pay_15_test.docx'
document = MailMerge(template)
# This should merge and then print each member on their own letter.
for row in delimeted_text[1:]:
document.merge(
SHARE_NBR = row[2],
MEMBER_NBR = row[1],
CITY = row[11],
ADDRESS1 = row[9],
ADDRESS2 = row[10],
LAST_NAME = row[8],
STATE = row[12],
FIRST_NAME = row[7],
ZIP = row[13],
LETTER_DATE = row[4],
BALANCE = row[6]
)
document.write('J:\output.docx')
win32api.ShellExecute(
0, "print", document, '/d:"%s"' % win32print.GetDefaultPrinter(),
".", 0)
Я ожидаю, что этот код должен печатать каждый документ после объединения полей, но вместо этого я получаю ошибку "Объекты типа 'MailMerge' не могут быть преобразованы в Unicode."
(Извините, если это слишком многословно, я никогда не публиковал здесь раньше).