在xslxwriter中模拟自动拟合列
我想在Python的xlsxwriter中模拟Excel自动拟合功能。根据此网址,不直接支持它:http
:
//xlsxwriter.readthedocs.io/worksheet.html
但是,在工作表中的每个单元格之间循环并确定列的最大大小,然后使用worksheet.set_column(row,col,width)设置宽度应该非常简单。
使我无法撰写本文的复杂因素包括:
- 该URL未指定set_column的第三个参数的单位。
- 我找不到一种方法来测量要插入单元格中的项目的宽度。
- xlsxwriter似乎没有读回特定单元格的方法。这意味着我在编写单元格时需要跟踪每个单元格的宽度。如果我可以循环遍历所有单元会更好,这样可以编写通用例程。
-
通常,您希望列的宽度比列中最长的字符串的大小大一些。xlsxwriter列的1个单位的with大约等于一个字符的宽度。因此,您可以通过将每列设置为该列中的最大字符数来模拟自动调整。
例如,在处理pandas数据框和xlsxwriter时,我倾向于使用以下代码。
它首先找到索引的最大宽度,该宽度始终是熊猫对excel渲染的数据框的左列。然后,它返回所有值的最大值和左向右移动的其余各列的列名。
对于您正在使用的任何数据,使此代码适应起来都不应该太困难。
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)