Задать вопрос
@Ryssine

Как изменить формат даты в openpyxl?

Пишу для работы универсальный шаблонизатор. И встрял с датами. Скрипт открывает произвольный файл xlsx, и вставляет данные из таблицы в Word. Но там где попадаются в excel столбцы с датами, python воспринимает его тип как datetime.datetime (Y-m-d H:M:S) , а не str (как мне нужно). Как сделать так, чтобы формат даты на выходе был хотя бы %d.%m.%Y.
Как я понял в openpyxl по умолчанию datetime - ISO

import re
import os
import openpyxl
from docxtpl import DocxTemplate

for file in os.listdir():
    if file.endswith(".xlsx"):
        filename = os.path.join(file)
        instruc_1 = str('1. В ПАПКЕ С ПРОГРАММОЙ ДОЛЖЕН НАХОДИТЬСЯ EXCEL ФАЙЛ С РАСШИРЕНИЕМ .xlsx')
        print (instruc_1)
        instruc_2 = str('2. В ПАПКЕ С ПРОГРАММОЙ ДОЛЖЕН НАХОДИТЬСЯ WORD ФАЙЛ (САМ ШАБЛОН) С РАСШИРЕНИЕМ ".docx"')
        print (instruc_2)
        warrning = str('К столбцу "AS" соответствует шаблон "aas"')
        print(warrning)
        start_row = input ('Введите начало строки: ')
        start_row = int(start_row)
        end_row = input ('Введите конец строки: ')
        end_row = int(end_row)
        book = openpyxl.open(filename)
        sheet = book.active
        string_count = 0
        mydict = ['','a','b','c','d','e']
        for row in range (start_row, end_row+1):
            string_count += 1
            context = {}
            for col in range (1, 6):
                context[mydict[col]] = sheet.cell(row, col).value 
            book.close()
            for docx in os.listdir():
                if docx.endswith(".docx"):
                    filename_doc = os.path.join(docx)
                    doc = DocxTemplate(filename_doc)
                    doc.render(context)     
                    doc.save(str(string_count)+" "+str(file)+".docx")


Ой как благодарю кто подскажет
  • Вопрос задан
  • 1540 просмотров
Подписаться 1 Средний Комментировать
Решения вопроса 1
@javedimka
Хочу сока
Питон настолько великолепный и удивительный язык, что он умеет преобразовывать типы datetime.datetime в строки! Да ещё и в такие, которые ты ему скажешь:
https://docs.python.org/3/library/datetime.html#st...

Спойлер:
все "универсальные шаблонизаторы" ломаются в первую неделю использования на реальных документах.
Например, твой универсальный шаблонизатор сломается в тот же день когда ему на вход подадут криво сгенерированный xlsx с дименшенами 1ККх16К. В твоём случае от такого может спасти открытие воркбука в режиме ридонли.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@Andy_U
Если openpyxl действительно возвращает вам дату/время, как datetime.datetime, то этот модуль (datetime) умеет и конвертировать этот тип в строку. Все написано в документации к питону.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы