Есть ли способ изменить формат с текста на дату, указанный в файле Excel для целей MailMerge? - PullRequest
1 голос
/ 23 апреля 2020

Надеюсь, вы в безопасности,

Я пытаюсь сделать почтовое слияние, которое будет собирать данные из файла excel с именем 'source1' и создавать шаблоны слов с использованием файла template.do c.

вывод в порядке, но формат должен быть исправлен для некоторых столбцов в файле Excel, таких как даты. по некоторым причинам даты включают часы

. Например, в сгенерированном шаблоне выводится 2020-12-12 00:00:00, в то время как требуемый формат должен быть 12 De c 2020.

ниже приведен код

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),

, но он выдал ошибку «Дата не определена»!

1 Ответ

1 голос
/ 01 мая 2020

Существует две проблемы:

  1. Вы неправильно пытаетесь преобразовать формат даты. Для этого вам нужно использовать библиотеку datetime , а не форматирование строки.
  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')
...