将@Mehdi Zare的评论作为答案添加,因为我几乎是手动实现的。
xlsxwriter
现在包含工作表的
autofit
方法。
sheet.autofit()
可能对你来说已经足够了。不过有一些限制。方法文档:
https://xlsxwriter.readthedocs.io/worksheet.html#worksheet-autofit
关于限制,请阅读文档的描述:
xlsx文件格式中没有可以用来在加载时自动调整列宽的选项。列宽的自动调整是Excel在运行时完成的,当它可以访问所有的工作表信息以及基于字体和格式的Windows函数来计算显示区域时。
这是一种模拟方法,可能在某些情况下不准确。
它基于默认字体和字号Calibri 11。对于其他字体或字号,它将无法给出准确的结果。
autofit()方法不会覆盖使用set_column()或set_column_pixels()设置的用户定义列宽,如果它大于自适应值。这允许用户为列设置最小宽度值。
您还可以在autofit()之后调用set_column()和set_column_pixels()来覆盖任何计算出的值。
文档中还有一个示例:
https://xlsxwriter.readthedocs.io/example_autofit.html
示例代码如下:
from xlsxwriter.workbook import Workbook
workbook = Workbook("autofit.xlsx")
worksheet = workbook.add_worksheet()
worksheet.write(0, 0, "Foo")
worksheet.write(1, 0, "Food")
worksheet.write(2, 0, "Foody")
worksheet.write(3, 0, "Froody")
worksheet.write(0, 1, 12345)
worksheet.write(1, 1, 12345678)
worksheet.write(2, 1, 12345)
worksheet.write(0, 2, "Some longer text")
worksheet.write(0, 3, "http://ww.google.com")
worksheet.write(1, 3, "https://github.com")
worksheet.autofit()
workbook.close()
win32com
解决方案非常完美。谢谢! - Walt Reedexcel.Visible = False
。 - Martin Evans