有没有办法将excel文件中给定的文本格式改为Date格式,以达到MailMerge的目的?

问题描述 投票:0回答:1

希望你保持安全。

我想做一个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' !

python mailmerge
1个回答
1
投票

有两个问题。

  1. 你不正确地尝试转换日期格式。对于这个问题,你会想使用 日期 库,而不是字符串格式化。
  2. 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')
© www.soinside.com 2019 - 2024. All rights reserved.