Запись многострочных строк в ячейки с помощью модуля xlwt

Python: есть ли способ записать многострочные строки в ячейку Excel с помощью только модуля xlwt? (я видел ответы, предлагающие использовать модуль openpyxl)

Метод sheet.write() игнорирует управляющую последовательность \n. Итак, просто xlwt, это возможно? Заранее спасибо.


person user2782845    schedule 16.09.2013    source источник


Ответы (3)


Я нашел ответ в группе python-excel Google. Использование sheet.write() с необязательным аргументом style, включающим перенос слов для ячейки, делает свое дело. Вот минимальный рабочий пример:

import xlwt
book = xlwt.Workbook()
sheet = book.add_sheet('Test')

# A1: no style, no wrap, despite newline
sheet.write(0, 0, 'Hello\nWorld')

# B1: with style, there is wrap
style = xlwt.XFStyle()
style.alignment.wrap = 1
sheet.write(0, 1, 'Hello\nWorld', style)
book.save('test.xls')

В то время как в ячейке A1 отображается HelloWorld без разрыва строки, в ячейке B1 отображается Hello\nWorld (т. е. с разрывом строки).

person ojdo    schedule 16.09.2013

Если вы не используете XFStyle, а используете easyxf, то это делается так:

import xlwt

style_head = xlwt.easyxf('alignment: wrap True')

row = 1
cell = 1
book = xlwt.Workbook(encoding='utf-8')
sheet = book.add_sheet()
sheet.write(row, cell, 'cell value', style_head)
person Samo A.    schedule 04.07.2019
comment
О, это классное дополнение к API. Папка примеров в репозитории xlwt даже показывает, как создать полную, красиво отформатированную таблицу отчета (заголовки, строки пользовательского числового формата): xlwt_easyxf_simple_demo.py. - person ojdo; 19.09.2019

Есть несколько вещей, которые вы можете попробовать:

  1. Windows обрабатывает новые строки иначе, чем Unix/Linux. В то время как символ \n (перевод строки) является стандартным методом Unix и также используется в Python, Windows требует возврата каретки и перевода строки. Поэтому вы можете попробовать заменить \n на \r\n.
  2. Если это не сработает, попробуйте заменить их символами ascii {chr(13) и chr(10)} внутри формулы.
  3. Если это все еще не работает, возможно, стоит попробовать эту статью. , что предполагает более сложный подход к решению проблемы.
person ChrisProsser    schedule 16.09.2013