Python – 自动调整Excel文件列的宽度

新手 – 我有一个Python脚本,根据指定的值调整Excel文件的不同列的宽度:

import openpyxl from string import ascii_uppercase newFile = "D:\Excel Files\abc.xlsx" wb = openpyxl.load_workbook(filename = newFile) worksheet = wb.active for column in ascii_uppercase: if (column=='A'): worksheet.column_dimensions[column].width = 30 elif (column=='B'): worksheet.column_dimensions[column].width = 40 elif (column=='G'): worksheet.column_dimensions[column].width = 45 else: worksheet.column_dimensions[column].width = 15 wb.save(newFile) 

有没有什么办法可以通过我们可以调整每个列的宽度,以最佳的价值,没有明确指定为不同的列(手段,而不使用此“ if-elif-elif -……- elif-else “ 结构体)? 谢谢!

 for col in worksheet.columns: max_length = 0 column = col[0].column # Get the column name for cell in col: try: # Necessary to avoid error on empty cells if len(str(cell.value)) > max_length: max_length = len(cell.value) except: pass adjusted_width = (max_length + 2) * 1.2 worksheet.column_dimensions[column].width = adjusted_width 

这大概可以做得更干净,但是它可以做到这一点。 您将需要根据您正在查看时使用的字体的好处来调整adjusted_width值。 如果你使用一个monotype,你可以得到确切的但不是一对一的相关性,所以你仍然需要调整一下。

如果你想得到花式和确切的没有monotype,你可以按宽度来分类字母,并为每个宽度分配一个浮点值,然后将它们相加。 这将需要第三个循环parsing单元格值中的每个字符,并总结每列的结果,并可能是一个按宽度sorting字符的字典,如果你这样做,可能是过度杀伤,但很酷。

编辑:其实似乎有一个更好的方式来衡量文字的视觉大小:个人链接我宁愿matplotlib技术。

希望我可以帮忙,我的第一个stackoverflow答案=)

我有一个与merged_cells和autosize不能正常工作的问题,如果你有同样的问题,你可以解决添加oldsea代码中的下一行

 for col in worksheet.columns: max_length = 0 column = col[0].column # Get the column name for cell in col: if cell.coordinate in worksheet.merged_cells: # not check merge_cells continue try: # Necessary to avoid error on empty cells if len(str(cell.value)) > max_length: max_length = len(cell.value) except: pass adjusted_width = (max_length + 2) * 1.2 worksheet.column_dimensions[column].width = adjusted_width 

如果可能的话,你应该确定列中最长条目的长度,并使用它来设置宽度。

我假设你可以使用ascii_uppercase进入。

我在移动ATM,所以不能给一个具体的代码示例,但我之前说的应该帮助你接近你想要达到的目标。