我正在尝试使用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报告。但我希望将其格式化为蓝色格式。因为笔记列不适合打印区域,如我用蓝色箭头提到的那样。 因此,我可以说我的代码将报告作为红色部分生成。 但我希望它适合蓝色部分的可打印区域。所以我希望能够设置单元格大小。文本将从左到右适合该单元格大小。随着文本大小的变化,上下单元格的大小将是动态的。
答案 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
这将提高内存效率。