最新消息:20210816 当前crifan.com域名已被污染,为防止失联,请关注(页面右下角的)公众号

【部分解决】openpyxl的excel设置列宽自适应+设置行高

Excel crifan 28121浏览 0评论

折腾:

【已解决】用openpyxl去新建excel文件并保存数据和设置单元格样式

后,发现生成的excel是:

其中,表头的宽度没有像另外一个手动创建并设置后的,去自动适应宽度:

openpyxl column width auto

python – openpyxl – adjust column width size – Stack Overflow

Python – Automatically adjust width of an excel file’s columns – Stack Overflow

openpyxl / openpyxl / issues / #425 – auto_size not working — Bitbucket

好像有个auto_size

去找找看

openpyxl column_dimensions

openpyxl.worksheet.dimensions module — openpyxl 2.5.3 documentation

“auto_size

Aliases can be used when either the desired attribute name is not allowed or confusing in Python (eg. “type”) or a more descriptve name is desired (eg. “underline” for “u”)”

看不懂

但是看到有个:

bestFit

Python使用openpyxl读写excel文件 – sunhaiyu – 博客园

“# 第2行行高sheet.row_dimensions[2].height = 40# C列列宽sheet.column_dimensions[‘C’].width = 30”

实在不行,就直接设置对应行高和列宽

openpyxl column_dimensions auto size

去试试:

结果好像是生效了一半:

现在是隐藏掉了该列:

但是双击后,可以显示出来:

那去试试:

以及参考:

openpyxl / openpyxl / issues / #425 – auto_size not working — Bitbucket

感觉best fit好像是我们要的效果:

自动根据内容匹配宽度?

结果试了半天:

# ws.column_dimensions["D"].auto_size = True

# ws.column_dimensions["D"].bestFit = False

# ws.column_dimensions["D"].collapsed = True

ws.column_dimensions["L"].auto_size = True

ws.column_dimensions["L"].bestFit = True

ws.column_dimensions["L"].collapsed = False

要么是:

直接把对应的列隐藏了

要么是不起效果。

【总结】

openpyxl的sheet中的column_dimensions的auto_size,bestFit,collapsed,都无法启到此处想要的效果:自动设置列宽。

最后只能是单独设置宽度了:

nameCell = ws["A1"]

nameCell.value = "名称"

ws.merge_cells(‘A1:A2’)

ws.column_dimensions["A"].width = 15

isSeriesCell = ws["D1"]

isSeriesCell.value = "是否是系列"

ws.merge_cells(‘D1:D2’)

# ws.column_dimensions["D"].auto_size = True

# ws.column_dimensions["D"].bestFit = False

# ws.column_dimensions["D"].collapsed = True

ws.column_dimensions["D"].width = 10

fitAgeRangeCell = ws["L1"]

fitAgeRangeCell.value = "适用年龄层(年)"

ws.merge_cells(‘L1:L2’)

# ws.column_dimensions["L"].auto_size = True

# ws.column_dimensions["L"].bestFit = True

# ws.column_dimensions["L"].collapsed = False

ws.column_dimensions["L"].width = 14

# ws["L3"].value = "很长的值很长的值很长的值测试列宽"

效果:

【后记 20180510】

表头的部分内容由于行高太低而不显示了:

想要去增加行高:

通过:

ws.column_dimensions["A"].width = 20

猜测到有:

row_dimensions

但是要去找找是否有

Search — openpyxl 2.5.3 documentation

-》

openpyxl.worksheet.copier — openpyxl 2.5.3 documentation

def _copy_dimensions(self):

    for attr in (‘row_dimensions’, ‘column_dimensions’):

以及具体如何使用

Search — openpyxl 2.5.3 documentation

-》

Working with styles — openpyxl 2.5.3 documentation

>>> row = ws.row_dimensions[1]

果然是猜测的是,直接数字就表示行

去试试

【总结】

然后用代码:

ws.row_dimensions[1].height = 30

ws.row_dimensions[2].height = 20

达到了增加行高,内容完全显示的效果:

转载请注明:在路上 » 【部分解决】openpyxl的excel设置列宽自适应+设置行高

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

网友最新评论 (1)

  1. hi,你好。 我这两天也在找如何结算自动调整列宽的方式,搜到很多方法都不怎么见效。 目前发现一种自动调整列宽的,但是效果并不是很完美,但至少会调整一些列宽,有兴趣的话,我们可以讨论讨论 # 设置自适应列宽 dims = {} #sheet为读取的工作表 for row in sheet.rows: for cell in row: if cell.value: #循环每行,分别比较然后取最大的长度设置为列宽 dims[cell.column] = max((dims.get(cell.column, 0), len(str(cell.value)))) for col, value in dims.items(): sheet.column_dimensions[col].width = value
    张皓5年前 (2019-07-05)回复
93 queries in 0.201 seconds, using 22.07MB memory