在xslxwriter中模拟自动拟合列

发布于 2021-01-29 17:56:14

我想在Python的xlsxwriter中模拟Excel自动拟合功能。根据此网址,不直接支持它:http
:
//xlsxwriter.readthedocs.io/worksheet.html

但是,在工作表中的每个单元格之间循环并确定列的最大大小,然后使用worksheet.set_column(row,col,width)设置宽度应该非常简单。

使我无法撰写本文的复杂因素包括:

  1. 该URL未指定set_column的第三个参数的单位。
  2. 我找不到一种方法来测量要插入单元格中的项目的宽度。
  3. xlsxwriter似乎没有读回特定单元格的方法。这意味着我在编写单元格时需要跟踪每个单元格的宽度。如果我可以循环遍历所有单元会更好,这样可以编写通用例程。
关注者
0
被浏览
50
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    通常,您希望列的宽度比列中最长的字符串的大小大一些。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)
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看