В статье «Почему форматы Microsoft Office такие сложные?» Джоэл Спольски пишет:

Заставьте Office делать грязную работу за вас. Word и Excel завязаны на сложных объектных моделях, основанных на автоматизации COM, что позволяет программно делать всё, что угодно. Во многих ситуациях проще будет использовать код Office, чем пытаться реализовать его с нуля.

Действительно, если требуется сформировать сложный офисный документ, проще сделать это вызовами API через COM-соединение. Однако, для создания простой эксель-таблички можно задействовать библиотеку xlwt.

Библиотека ставиться просто:

pip install xlwt

Требуется сформировать таблицу с тремя колонками:

  1. номер лицевого счета абонента, строковый тип;
  2. дата показания, тип дата;
  3. показание, тип число.

Проект выполнен на Джанго. Есть модель показания, переданного абонентом:

class Statement(models.Model):
    user = models.ForeignKey(User)
    value = models.DecimalField(max_digits=12, decimal_places=6)
    date = models.DateTimeField(default=datetime.now)

Показания, которые необходимо записать в таблицу, извлекаются следующим образом

statements = Statement.objects.filter(date__range=(t1, t2))

Формирование файла Excel будет выглядеть так:

import xlwt

# Определяем формат ячеек для дат
date_style = xlwt.XFStyle()
date_style.num_format_str = "M/D/YY"

# Определяем формат ячеек для чисел
num_style = xlwt.XFStyle()
num_style.num_format_str = "0.00"

wbk = xlwt.Workbook() # Новая книга
sheet = wbk.add_sheet("statements") # Новый лист в книге

# Добавляем шапку таблицы
sheet.write(0, 0, u"Лицевой счет")
sheet.write(0, 1, u"Дата")
sheet.write(0, 2, u"Показание")

# Обход показаний, statements — объект QuerySet из Джанго
for i, s in enumerate(statements):

    # i — индекс итерации, используется как номер строки
    sheet.write(i+1, 0, s.user.username)
    sheet.write(i+1, 1, s.date, date_style)
    sheet.write(i+1, 2, s.value, num_style)

# Задаем ширину колонок
sheet.col(0).width = 5000
sheet.col(1).width = 5000
sheet.col(2).width = 5000

# Запись файла
wbk.save("path/to/file.xls")