2016-03-01 9 views
3

Я теряюсь от использования worksheet.set_column все время. Есть ли возможность автоматически установить ширину всех столбцов?Как автоматически установить ширину столбца в xlsxwriter

+0

Можете ли вы предоставить фактический код, используемый в настоящее время для установки ширины столбцов? – alecxe

ответ

4

Есть ли возможность установки ширины всех столбцов автоматически?

К сожалению, нет.

От XlsxWriter FAQ:

Q. Есть ли возможность "Автоподбор" для столбцов?

К сожалению, нет способа указать «Автозаполнение» для столбца в формате файла Excel. Эта функция доступна только во время выполнения из Excel. Можно моделировать «AutoFit» в вашем приложении, отслеживая максимальную ширину данных в столбце, как вы его записываете, а затем корректируете ширину столбца в конце.

+0

Фактически, я сохраняю максимальную длину каждого столбца и корректирую их после того, как я вставляю все данные, но проблема в том, что u отрегулирует длину данных, некоторые ширины будут слишком большими. –

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 
+0

К сожалению, я не хочу снова открывать файл –

+1

Понял. Удачи. – bernie

Смежные вопросы