希望你保持安全。
我想做一个mailmerge,从一个名为'source1'的excel文件中获取数据,并使用template.doc文件创建word模板。
输出是好的,但是excel文件中的一些列的格式需要固定,比如日期。
例如在模板中生成的输出是2020-12-12 00:00:00,而要求的格式必须是2020年12月12日。
以下是代码
from mailmerge import MailMerge
import openpyxl
import datetime
wb=openpyxl.load_workbook('source1.xlsx')
sheet= wb['Sheet1']
max_col = sheet.max_row
sheet.delete_rows(sheet.min_row,1)
for i in range(1, max_col):
template='template.docx'
document1=MailMerge(template)
document1.merge(
first_name = str(sheet.cell(row=i,column=1).value),
last_name = str(sheet.cell(row = i, column = 2).value),
salary = str(sheet.cell(row = i, column = 3).value),
Date = str (sheet.cell(row = i, column =4 ).value),
date1='{:%d-%b-%Y}'.format(Date),
# country = str ( sheet.cell(row = i, column = 5). value),
# Title = str(sheet.cell(row = i, column = 6).value),
# item = str(sheet.cell(row = i, column = 7).value),
# price = '$'+str(sheet.cell(row = i, column=8).value),
# quantity = str(sheet.cell(row=i, column = 9).value),
# total = str(sheet.cell(row = i, column = 10).value),
)
document1.write('Letter for ' +str(sheet.cell(row=i, column=1).value)+'.docx')
我试着用
Date = str (sheet.cell(row = i, column =4 ).value),
date1='{:%d-%b-%Y}'.format(Date),
但它给我的错误'Date is not defined' !
有两个问题。
Date
是一个命名的参数,用于 document1.merge()
所以你不能在函数调用中访问它。你可以从 示例用法 的图书馆 document.merge
需要 kwargs
对应于合并字段,但你却试图创建正则变量 内 这个函数调用。为了解决这个问题,你应该在函数调用之前进行日期转换。
import datetime as dt
...
for i in range(1, max_col):
# Convert the format here
Date = str(sheet.cell(row = i, column =4 ).value) # Assuming format e.g. 2020-05-01
date1 = dt.datetime.strptime(Date, '%Y-%m-%d').strftime('%d-%b-%Y')
template = 'template.docx'
document1 = MailMerge(template)
document1.merge(first_name = str(sheet.cell(row=i,column=1).value),
last_name = str(sheet.cell(row = i, column = 2).value),
salary = str(sheet.cell(row = i, column = 3).value),
date1 = date1)
document1.write('Letter for ' +str(sheet.cell(row=i, column=1).value)+'.docx')