Создание файла Excell с книгой и рабочим листом Django - PullRequest
0 голосов
/ 08 октября 2018

Я пытаюсь создать отчет об исключениях с рабочей книгой и рабочим столом django, как показано ниже.

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

Когда я печатаю отчет, я получаю отчет об исключениях, как показано ниже, в данных красного цвета.Но я хочу, чтобы он был отформатирован как синий цвет.Поскольку столбец заметок не помещается в области печати, как я упомянул это с синей стрелкой.Поэтому я могу сказать, что мои коды генерируют отчет в виде красной части.Но я хочу, чтобы он поместился в области для печати в синей части.Поэтому я хочу иметь возможность устанавливать размеры ячеек.И текст будет соответствовать размеру ячейки слева направо.Размер ячейки сверху вниз будет динамическим, так как размер текста может измениться.

enter image description here

1 Ответ

0 голосов
/ 09 октября 2018

Если вы используете openpyxl, вы можете изменить стили своих ячеек, как описано в документации :

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

, что будет более эффективным с точки зрения памяти.

...