在Excel中调整单元格宽度

时间:2015-11-12 06:57:31

标签: python excel xlsxwriter

我正在使用xlsxwriter写入Excel工作表。我面临的问题是:当文本超过单元格大小时,它会被隐藏。

import xlsxwriter

workbook = xlsxwriter.Workbook("file.xlsx")
worksheet1 = workbook.add_worksheet()

worksheet1.write(1, 1,"long text hidden test-1" )
worksheet1.write(2, 1,"long text hidden test-2")
worksheet1.write(3, 1,"short-1")
worksheet1.write(4, 1,"short-2")
worksheet1.write(1, 2,"Hello world" )
worksheet1.write(2, 2,"Hello world")
worksheet1.write(3, 2,"Hello world")
worksheet1.write(4, 2,"Hello world")

workbook.close()

我得到了什么

enter image description here

我希望调整后的宽度

enter image description here

3 个答案:

答案 0 :(得分:27)

您可以按如下方式使用set_column

worksheet1.set_column(1, 1, 25)

这定义如下:

set_column(first_col, last_col, width, cell_format, options)

如果您想自动自动更新所有列,则需要使用win32com界面,如下所示:

import win32com.client as win32
excel = win32.gencache.EnsureDispatch('Excel.Application')
wb = excel.Workbooks.Open(r'file.xlsx')
ws = wb.Worksheets("Sheet1")
ws.Columns.AutoFit()
wb.Save()
excel.Application.Quit()

使用当前的xlsxwriter代码关闭文件后,可以轻松完成此操作。请注意,您可能需要提供文件的完整路径。

答案 1 :(得分:8)

不幸的是xlsxwriter不提供自动调整选项。

但是,您可以跟踪每列的最大条目,然后使用set column命令在最后设置列宽。

set_column(first_col, last_col, width, cell_format, options)

例如,在您的情况下,您应该将B列的宽度设置为最大字符串的长度。

width= len("long text hidden test-1")
worksheet1.set_column(1, 1, width)

答案 2 :(得分:0)

以下通过 df 为我工作 - 它找到每列的最大宽度并相应地进行调整,如下所示:Simulate autofit column in xslxwriter

def get_col_widths(dataframe):
    # First we find the maximum length of the index column   
    idx_max = max([len(str(s)) for s in dataframe.index.values] + [len(str(dataframe.index.name))])
    # Then, we concatenate this to the max of the lengths of column name and its values for each column, left to right
    return [idx_max] + [max([len(str(s)) for s in dataframe[col].values] + [len(col)]) for col in dataframe.columns]

for i, width in enumerate(get_col_widths(dataframe)):
    worksheet.set_column(i, i, width)