我总是迷失使用worksheet.set_column
。是否有可能自动设置所有列的宽度?
答案 0 :(得分:4)
是否有可能自动设置所有列的宽度?
不幸的是,不是。
问。是否有" AutoFit"列的选项?
不幸的是,没有办法指定" AutoFit"对于Excel文件格式的列。此功能仅在运行时从Excel中可用。可以模拟" AutoFit"在您的应用程序中,通过在写入时跟踪列中数据的最大宽度,然后在末尾调整列宽。
答案 1 :(得分:2)
我只知道用COM做这件事的方法。
import contextlib, os, win32com.client
@contextlib.contextmanager
def load_xl_file(xlfilepath):
''' Open an existing Excel file using a context manager
`xlfilepath`: path to an existing Excel file '''
xl = win32com.client.DispatchEx("Excel.Application")
wb = xl.Workbooks.Open(xlfilepath)
try:
yield wb
finally:
wb.Close(SaveChanges=True)
xl.Quit()
xl = None # this actually ends the process
def xlautofit(xlfilepath,skip_first_col=False):
''' relies on win32com.client to autofit columns on data sheets
remember that this is using COM so sheet numbers start at 1 (not 0),
so to avoid requiring the caller to remember this, we increment
returns full path (including dir) to file '''
if os.path.splitext(xlfilepath)[1] not in ('.xls','.xlsx'):
raise
return -1
autofitbegcol = 1
if skip_first_col:
autofitbegcol += 1
# Autofit every sheet
with load_xl_file(xlfilepath) as wb:
for ws in wb.Sheets:
autofitendcol = ws.UsedRange.Columns.Count
ws.Range(ws.Cells(1, autofitbegcol),
ws.Cells(1, autofitendcol)).EntireColumn.AutoFit()
return xlfilepath
答案 2 :(得分:0)