如何自动设置xlsxwriter中列的宽度

时间:2016-03-01 16:30:40

标签: python python-3.x xlsxwriter

我总是迷失使用worksheet.set_column。是否有可能自动设置所有列的宽度?

3 个答案:

答案 0 :(得分:4)

  

是否有可能自动设置所有列的宽度?

不幸的是,不是。

来自XlsxWriter FAQ

  

问。是否有" 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)

如果你只想要列自动调整,也许这会有所帮助:

{{1}}

更多细节请查看https://stackoverflow.com/a/33665967/1383521 :)