折腾:
后,发现生成的excel是:
其中,表头的宽度没有像另外一个手动创建并设置后的,去自动适应宽度:
openpyxl column width auto
好像有个auto_size
去找找看
openpyxl column_dimensions
“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
“# 第2行行高sheet.row_dimensions[2].height = 40# C列列宽sheet.column_dimensions[‘C’].width = 30”
实在不行,就直接设置对应行高和列宽
openpyxl column_dimensions auto size
去试试:
结果好像是生效了一半:
现在是隐藏掉了该列:
但是双击后,可以显示出来:
那去试试:
以及参考:
感觉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
但是要去找找是否有
-》
def _copy_dimensions(self):
for attr in (‘row_dimensions’, ‘column_dimensions’):
以及具体如何使用
-》
>>> row = ws.row_dimensions[1]
果然是猜测的是,直接数字就表示行
去试试
【总结】
然后用代码:
ws.row_dimensions[1].height = 30
ws.row_dimensions[2].height = 20
达到了增加行高,内容完全显示的效果: