使用Django工作簿和工作表创建excell文件

时间:2018-10-08 08:11:44

标签: django excel python-2.7 worksheet

我正在尝试使用django工作簿和workseet创建excell报告,如下所示。

def print_assistant_notes(request):
if request.method == 'GET':
    notes = AssistantNotes.objects.filter(notedate=datetime.today().date()).order_by("time")
    workbook = load_workbook(os.path.join(settings.BASE_DIR, "export_templates", "assistant_notes.xlsx"))
    worksheet = workbook.active
    title_cell = worksheet["A%d" % (1,)]
    title_cell.value = "Assistant Notes [ "+str(datetime.today().date())+" ] "
    row = 3
    for note in notes:
        time_cell = worksheet["A%d" % (row,)]
        category_cell = worksheet["B%d" % (row,)]
        note_cell = worksheet["C%d" % (row,)]

        time_cell.value = note.time
        category_cell.value = note.categories
        note_cell.value = note.dailynote

        row = row + 1
    tmp_file = tempfile.NamedTemporaryFile()
    workbook.save(tmp_file.name)
    response = HttpResponse(smart_str(tmp_file.read()), content_type='application/vnd.ms-excel')
    response["Content-Disposition"] = 'attachment; filename="assistant_notes.xlsx"'
    return response

当我打印报告时,我得到如下红色数据的excell报告。但我希望将其格式化为蓝色格式。因为笔记列不适合打印区域,如我用蓝色箭头提到的那样。 因此,我可以说我的代码将报告作为红色部分生成。 但我希望它适合蓝色部分的可打印区域。所以我希望能够设置单元格大小。文本将从左到右适合该单元格大小。随着文本大小的变化,上下单元格的大小将是动态的。

enter image description here

1 个答案:

答案 0 :(得分:1)

如果您使用的是openpyxl,则实际上可以更改单元格的样式,如documentation所述:

from openpyxl.styles import Alignment

note_cell.alignment = Alignment(wrap_text=True)

或在您的alignment循环之前创建一个for...对象并重复使用:

al = Alignment(wrap_text=True)
for note in notes:
    ...
    note_cell = worksheet["C%d" % (row,)]
    note_cell.alignment = al

这将提高内存效率。