col_width = []
for i in range(len(next(ws.iter_rows()))):
col_letter = get_column_letter(i + 1)
minimum_width = 20
current_width = ws.column_dimensions[col_letter].width
if not current_width or current_width < minimum_width:
ws.column_dimensions[col_letter].width = minimum_width
col_width.append(ws.column_dimensions[col_letter].width)
for i, row in enumerate(ws):
default_height = 12.5 # Corresponding to font size 12
multiples_of_font_size = [default_height]
for j, cell in enumerate(row):
wrap_text = True
vertical = "top"
if cell.value is not None:
mul = 0
for v in str(cell.value).split('\n'):
mul += math.ceil(len(v) / col_width[j]) * cell.font.size
if mul > 0:
multiples_of_font_size.append(mul)
cell.alignment = Alignment(wrap_text=wrap_text, vertical=vertical)
original_height = ws.row_dimensions[i + 1].height
if original_height is None:
original_height = default_height
new_height = max(multiples_of_font_size)
if original_height < new_height:
ws.row_dimensions[i + 1].height = new_height
6条答案
按热度按时间js81xvg61#
您需要查看相关行的
RowDimension
对象,特别是height属性:fgw7neuy2#
可以使用row_dimensions或column_dimensions属性设置高度或宽度:
brccelvz3#
试试这样,它对我的工作:
ioekq8ef4#
如果你的数据存储在DataFrame中,我建议你使用StyleFrame。它可以自动调整列宽和行高,也有一些不错的功能。
styleframe
g2ieeal75#
试试看:
最新版本。
但并不完美。如果你想要更好的,你可能必须使用等宽字体或
pillow
。7gyucuyw6#
您可以将行高设置为“无”。如果这样做,那么在.xlsx文件的x1/worksheets/sheet.xml文件中,row元素将没有为行高设置显式值。Excel将根据内容自动调整行高。