Проблема заключается в том, что каждый файл, созданный с использованием метода MailMerge, имеет одинаковые данные поля слияния с первой итерации в цикле i, хотя те же соглашения об индексах, которые называются напечатанными в цикле i [0], будут отображаться правильнотак как я печатаю каждую итерацию, и те же самые индексы используются для именования каждого .docx, как и ожидалось, каждый раз в цикле.
Код:
import pandas as pd
from mailmerge import MailMerge
import numpy as np
df1 = xl.parse('Sheet1')
df2 = pd.DataFrame(df1)
data1 = np.array(df2)
template = "Form_Template.docx"
document = MailMerge(template)
for i in data1:
document.merge(
Name= i[0],
Domain= 'fruitcorp.local',
userid= i[1],
Password= '*',
date_ini='{:%d-%b-%Y}_______'.format(date.today()),
comment='* This is a replacement for a missing original form.
Original start date was: ',
startdate= str(i[3]))
print(i[0])
document.write(i[1] + 'Replacement_Account_Acceptance_Form.docx')
Вот отображаемый вывод, которыйЯ получаю:
In: print(data1):
Out:[['Apple Jacks' 'ajacks' Timestamp('2015-07-26 18:49:11') '26-Jul-015']
['Orange Gladys' 'ogladys' Timestamp('2015-01-05 18:50:38')
'05-Jan-2015']
['Ed Banana' 'ebanana' Timestamp('2017-01-09 18:51:47') '09-Jan-2017']
['Kiwi Lime' 'klime' Timestamp('2015-02-09 18:52:42') '09-Feb-2015']
['Pie Cheesecake' 'pcheesecake' Timestamp('2011-07-28 14:06:26')
'28-Jul-2011']]
#iterated properly:
In: for i in data1:
print(i[0])
Out: Apple Jacks
Orange Gladys
Ed Banana
Kiwi Lime
Pie Cheesecake
Но тот же индексный вызов
i [0]
в поле «Имя» документа.mergeФункция и i [0] аналогично для поля 'userid' приводит к тому, что значение итерации остается в виде метки времени ['Apple Jacks' 'ajacks' ('2015-07-26 18:49:11') '26 -Jul-2015 '] каждая итерация
In: for i in data1:
document.merge(
Name= i[0],
startdate= str(i[3]),
userid= i[1]))
Out: Name= Apple Jacks
startdate= 26-Jul-2015
userid= ajacks
Name= Apple Jacks
startdate= 26-Jul-2015
userid= ajacks
Name= Apple Jacks
startdate= 26-Jul-2015
userid= ajacks
Name= Apple Jacks
startdate= 26-Jul-2015
userid= ajacks
Name= Apple Jacks
startdate= 26-Jul-2015
userid= ajacks
Одни и те же данные повторяются каждые (5) раз, а не производят 5 уникальных наборов. Все, о чем я могу думать, - это то, что я неправильно использую индекс DataFrame, когда яМетод MailMerge.
... Вместо этого используйте i [0] [0]?
In: for i in data1:
document.merge(
Name= i[0][0],
startdate= str(i[3][0]),
userid= i[1][0]))
Out: Name= A
startdate= 2
userid= a
Name= A
startdate= 2
userid= a
Name= A
startdate= 2
userid= a
Name= A
startdate= 2
userid= a
Name= A
startdate= 2
userid= a
(Было бы намного проще получить доступ к моим реляционным данным в виде словаря?) Главный вопрос: как можноЛучше всего, чтобы каждый созданный документ содержал правильные данные поля из каждой итерации цикла, а не каждый из них содержит данные первой строки (все созданные документы содержат: «Apple Jacks, ajacks, 26-Jul-2015» в своих полях слияния)