MS Word Mail Merge, исключая текстовое поле в таблицах до последней строкиPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 MS Word Mail Merge, исключая текстовое поле в таблицах до последней строки

Сообщение Anonymous »


Надеюсь, это простая проблема, которую я только что упустил из виду, и здесь может помочь другая точка зрения.

Я написал один файл LabelGenerator.py с целью создания документа формата A4, содержащего серию меток. Достаточно просто.

Он правильно записывает все данные типа STR, однако имеет проблемы с текстовыми полями, содержащимися в таблице. Они исключены из таблицы, ЗА ИСКЛЮЧЕНИЕМ последней строки. Это верно независимо от количества строк.

Цель этих текстовых полей — включать в них изображения. Теперь я знаю, что MailMerge, который я использую, в данный момент не поддерживает это, но все же наличие полей в качестве заполнителя является идеальным вариантом, а не его полное отсутствие.

Итак, вопрос в следующем; Есть ли решение этой проблемы? Поддерживает ли это MailMerge? Или текстовые поля внутри таблицы — это перебор?

В качестве альтернативы, если кто-то знает модуль, который может выполнять то же самое MailMerge И добавлять изображения, я буду бесконечно рад, если вы поделитесь с нами :)

Код выглядит следующим образом:

def MailMerge(self): примерДанные = [{ «Изображение»: «Добавить изображение сюда», «Клиент»: «Тестовая компания», «ПО»: «ПО 01», 'PartDesc': 'Тестовая часть', «CustPart»: «TST00010», «Кол-во деталей»: 3 },{ «Изображение»: «Добавить изображение сюда», «Клиент»: «Тестовая компания», «ПО»: «ПО 02», 'PartDesc': 'Тестовая часть', «CustPart»: «TST00020», 'Кол-во Деталей': 1 },{ «Изображение»: «Добавить изображение сюда», «Клиент»: «Тестовая компания», «ПО»: «ПО 03», 'PartDesc': 'Тестовая часть', «CustPart»: «TST00030», «Кол-во деталей»: 4 }] Это берется и дублируется в другой массив, по одному экземпляру на каждое количество. Итак, в этом примере массив perLabel содержит 3x TST00010, 1x TST00020, 4x TST00030.

# Создать массив каждой отдельной метки listLabels = Пример данных каждая метка = [] для элемента в listLabels: для n в диапазоне (item['PartQty']): perLabel.append(элемент) # Подсчитаем количество операций ## — Две этикетки в каждой строке, поэтому мы ПОЛОВИНУ от общего количества, чтобы получить количество строк numLabels = len(perLabel) число операций = 0 если (numLabels % 2) == 0: numOps = numLabels/2 else: numOps = (numLabels/2) + 0,5 # Должно быть целое число # Назначаем метки временным переменным «cell_Left» и «cell_Right». ## Они содержат правильные имена MergeField в зависимости от того, на какой стороне будет размещена метка numRem = число меток список слияния = [] для n в диапазоне (int(numOps)): print(f"rem. {numRem}") ## Больше не использовать 'cell_Right', так как он добавлял ОДНУ метку в каждую строку, оставляя ее соседа пустым ### Вместо этого cell_Left теперь содержит данные обеих строк ячейка_Left = { 'Изображение_1': '', 'Клиент_1': '', 'PO_1': '', 'PartDesc_1': '', 'CustPart_1': '', 'PartQty_1': '' } # cell_Right = { # 'Изображение_2': '', # 'Клиент_2': '', # 'PO_2' : '', # 'PartDesc_2': '', # 'CustPart_2': '', # 'PartQty_2' : '' # } # MailMerge Левая ячейка и правая ячейка если numRem >= 2: # Присвойте значения данных CellLeft/Right ## найти способ индексировать каждый элемент ## (n * 2) = y, обработать y и y+1 ## (0 * 2) = 0 — поэтому делаем 0 и 1 ##(1*2)=2 — так делаем 2 и 3 ##(2*2)=4 — так делаем 4 и 5 ##(3*2)=6 — так делаем 6 и 7 слева = п*2 вправо = (n*2)+1 # Пробелы созданы специально — они используются для форматирования меток в MS Word. cell_Left['Image_1'] = perLabel[left]['Image'] cell_Left['Customer_1'] = f" Клиент: {perLabel[left]['Customer']}" cell_Left['PO_1'] = f" Заказ на поставку: {perLabel[left]['PO']}" cell_Left['PartDesc_1'] = f" Описание детали: {perLabel[left]['PartDesc']}" cell_Left['CustPart_1'] = f" Cust. Часть № : {perLabel[left]['CustPart']}" cell_Left['PartQty_1'] = f" Количество детали: {str(perLabel[left]['PartQty'])}" cell_Left['Image_2'] = perLabel[right]['Image'] cell_Left['Customer_2'] = f" Клиент: {perLabel[right]['Customer']}" cell_Left['PO_2'] = f" Заказ на поставку: {perLabel[right]['PO']}" cell_Left['PartDesc_2'] = f" Описание детали: {perLabel[right]['PartDesc']}" cell_Left['CustPart_2'] = f" Cust. Part n#: {perLabel[right]['CustPart']}" cell_Left['PartQty_2'] = f" Количество детали: {str(perLabel[right]['PartQty'])}" mergeList.append(cell_Left) # mergeList.append(cell_Right) числоRem -= 2 # MailMerge Только левая ячейка еще: cell_Left['Image_1'] = perLabel[left]['Image'] cell_Left['Customer_1'] = f" Клиент: {perLabel[n*2]['Customer']}" cell_Left['PO_1'] = f" Заказ на поставку: {perLabel[n*2]['PO']}" cell_Left['PartDesc_1'] = f" Описание детали: {perLabel[n*2]['PartDesc']}" cell_Left['CustPart_1'] = f" Cust. Part n#: {perLabel[n*2]['CustPart']}" cell_Left['PartQty_1'] = f" Количество детали: {str(perLabel[n*2]['PartQty'])}" mergeList.append(cell_Left) числоRem -= 1 # Здесь, в For(), мы закончили ## Обратите внимание, что без этого функция for() должна прерваться, но ради этого мы оставим ее здесь перерыв # return #Использовать для отладки документ = MailMerge(self.temPath) doc.merge_rows('Image_1', mergeList) doc.write('X:\Scripts\mergedoc.docx') Скриншоты шаблона и результата соответственно: Изображения отмечены сочетанием клавиш «Ctrl+A» для ясности относительно текстовых полей (у них нет рамки)


Изображение



Изображение

Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Автоматически загружать панель задач во вновь созданном документе Word из существующего документа Word в проекте Word, д
    Anonymous » » в форуме C#
    0 Ответы
    152 Просмотры
    Последнее сообщение Anonymous
  • Автоматически загружать панель задач во вновь созданном документе Word из существующего документа Word в проекте Word, д
    Anonymous » » в форуме Jquery
    0 Ответы
    100 Просмотры
    Последнее сообщение Anonymous
  • Fastapi Endpoint Stream LLM Вывод Word Word Word
    Anonymous » » в форуме Python
    0 Ответы
    6 Просмотры
    Последнее сообщение Anonymous
  • Fastapi Endpoint Stream LLM Вывод Word Word Word
    Anonymous » » в форуме Python
    0 Ответы
    4 Просмотры
    Последнее сообщение Anonymous
  • Fastapi Endpoint Stream LLM Вывод Word Word Word
    Anonymous » » в форуме Python
    0 Ответы
    3 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»