我正在使用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()
我得到了什么
我希望调整后的宽度
答案 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)