@shmostertoster

Как записать список дат в Excel?

Подскажите как записать список из дат в excel книгу после выполнения этого кода.
Т.е. например в книгу1 на лист1 в столбецД с первой по 145 ячейки.
не получается такой цикл написать для дат.
Конвертировать в str не получается. Записать построчно через цикл for - тоже.
Спасибо!

from datetime import datetime, date, time
from dateutil.relativedelta import relativedelta
import xlrd, xlwt

wb = xlrd.open_workbook('Workbook.xls', encoding_override ="cp1251") # открываю книгу
ws = wb.sheet_by_name('Лист1')  # выбираю лист по названию

datas = ws.cell_value(0, 0) # выбираю колонку с датами
datetime_value = datetime(*xlrd.xldate_as_tuple(datas, 0))
datr = datetime_value.date()

wb2 = xlwt.Workbook('Workbook.xls')  # вот этот момент не очень понимаю, но без него не работает
                      # наверное это из-за того что в первом случае работает xlrd, а во втором xlwt
ws2 = wb2.add_sheet("Pi", cell_overwrite_ok=True)


for row_index in range(ws.nrows): # здесь по условиям прибавляется возраст к дате рождения
        dateq = ws.row(row_index)[0].value
        datetime_value2 = datetime(*xlrd.xldate_as_tuple(dateq, 0))
        datr2 = datetime_value2.date()

        sex = ws.row(row_index)[1].value


        if ws.row(row_index)[1].value == 'male':
            if datr2 <= date(1956, 12, 31):
                datr2 += relativedelta(years=60)
        if ws.row(row_index)[1].value == "female":
            if datr2 <= date(1961, 12, 31):
                datr2 += relativedelta(years=55)
            print(datr2.strftime('%d.%m.%Y'))

        i = 1

        style1 = xlwt.easyxf(num_format_str='DD.MM.YYYY')
        ws2.write(i, 2, datr2, style1)
        i =+ i

print("The End")

wb2.save('write_only_file.xls')


В консоль код выводит полный список измененных дат, но вот в файл пишет только последнее значение.
  • Вопрос задан
  • 623 просмотра
Решения вопроса 1
Ba1t
@Ba1t
# вариант 1
ws2.write(2, datr2.isoformat(), style1)
# вариант 2 - https://docs.python.org/3/library/datetime.html#strftime-strptime-behavior
ws2.write(2, datr2.strftime('%d-%m-%Y'), style1)
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
nightvich
@nightvich
ITman
from datetime import datetime, date
from dateutil.relativedelta import relativedelta
from xlrd import *
from xlrd.xldate import xldate_from_date_tuple, xldate_from_datetime_tuple
from xlwt import *
import xlrd, xlwt
daded366927040aa84031d48c5b49304.jpeg
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы