Python Openpyxl自动高度行

Python Openpyxl自动高度行,python,openpyxl,Python,Openpyxl,我正在尝试设置换行文本。但当我使用换行文字时,行的高度不会自动改变。如何设置自动高度行?您需要查看相关行的行维度对象,特别是高度属性: rd = ws.row_dimensions[3] # get dimension for row 3 rd.height = 25 # value in points, there is no "auto" 如果您的数据存储在DataFrame中,我建议您使用StyleFrame。 它可以自动调整列宽和行高,还具有一些很好的功能 试试: col_width

我正在尝试设置换行文本。但当我使用换行文字时,行的高度不会自动改变。如何设置自动高度行?

您需要查看相关行的
行维度
对象,特别是高度属性:

rd = ws.row_dimensions[3] # get dimension for row 3
rd.height = 25 # value in points, there is no "auto"

如果您的数据存储在DataFrame中,我建议您使用StyleFrame。 它可以自动调整列宽和行高,还具有一些很好的功能

试试:

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
col_width=[]
对于范围内的i(len(next(ws.iter_rows()):
列字母=获取列字母(i+1)
最小宽度=20
当前宽度=ws.列尺寸[列字母].宽度
如果不是当前宽度或当前宽度<最小宽度:
ws.column\u维度[列字母]。宽度=最小宽度
col\u width.append(ws.column\u维度[col\u letter].width)
对于i,枚举(ws)中的行:
默认高度=12.5#对应于字体大小12
乘以字体大小=[默认高度]
对于j,枚举(行)中的单元格:
换行文字=真
垂直=“顶部”
如果cell.value不是无:
mul=0
对于str(cell.value).split('\n')中的v:
mul+=math.ceil(len(v)/col_-width[j])*cell.font.size
如果mul>0:
字体大小的倍数。追加(mul)
cell.alignment=对齐(环绕文本=环绕文本,垂直=垂直)
原始高度=ws.行尺寸[i+1]。高度
如果原始高度为“无”:
原始高度=默认高度
新高度=最大值(字体大小的倍数)
如果原始高度<新高度:
ws.row\u维度[i+1]。高度=新高度


但这并不完美。如果您想要更好,您可能需要使用单空格字体或
枕头

您可以使用“行尺寸”或“列尺寸”属性来设置高度或宽度:

# set the height of the row 
sheet.row_dimensions[1].height = 20
  
# set the width of the column 
sheet.column_dimensions['B'].width = 20

你能再解释一下吗。我为StyleFrame找到的唯一一件事是,有一些库可以处理excel文件。有没有办法使用openpyxl库切换到StyleFrame?样式框架也不适用于最新的openpyxl版本。我们有一些数据,因为我们知道我们计划将其导出到excel文件,所以将其存储在类似excel文件(有列和行)的数据结构中是有意义的,熊猫是完美的解决方案。由于我们还希望设计excel文件,因此我们可以使用该文件来设置数据框的样式,一旦我们将其导出到excel,也会应用该样式。我建议您在github repo中学习StyleFrame教程。