【发布时间】:2018-12-27 21:48:19
【问题描述】:
问题是使用 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
但同样的索引调用
我[0]
在 document.merge 函数的 'Name' 字段和 i[0] 中类似地对于 'userid' 字段,导致迭代值保持为 ['Apple Jacks' 'ajacks' Timestamp('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 个唯一的集合 我能想到的是,当我在 MailMerge 方法中时,我没有正确使用 DataFrame 索引。
...改用 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' 在他们的合并字段中)
【问题讨论】:
-
这感觉不像是一个最小的例子。见minimal reproducible example。
-
我很抱歉没有把这个作为一个最小的例子。我是这里的新手,也是 python 的新手,我认为在我完全错误的情况下展示完整的方法会很有帮助
-
如果我理解正确,您只需要再索引一次:如果
i[0]是['Apple Jacks', 'ajacks', Timestamp('2015-07-26 18:49:11'), '26-Jul-2015'],那么i[0][0]是'Apple Jacks'。 -
虽然我觉得我不理解正确,但是文字太多了。您可以简单地将您的问题编辑成这样:(1)这是我的代码,(2)这是我的输入,(3)这是我得到的,(4)这是我想要 得到。
-
“这就是我得到的”我的意思是正是你得到的复制/粘贴的,不是你自己的话描述的。
标签: python-3.x dataframe for-loop mailmerge numpy-ndarray