本文介绍了如何在OpenPYXL中将列宽设置为Best Fit的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经用一些数据填充了一个工作表,并且我正在尝试使列宽达到最佳匹配,如here所示。基本上就是当您双击列宽调整分隔符时发生的那种自动调整。

这是我的最小示例,就我对openpyxl文档的理解而言,它应该是有效的:

import openpyxl
from typing import NoReturn

def columns_best_fit(ws: openpyxl.worksheet.worksheet.Worksheet) -> NoReturn:
    """
    Make all columns best fit
    """
    column_letters = tuple(openpyxl.utils.get_column_letter(col_number + 1) for col_number in range(ws.max_column))
    for column_letter in column_letters:
        dim = openpyxl.worksheet.dimensions.ColumnDimension(ws, index=column_letter, bestFit=True, customWidth=True)
        ws.column_dimensions[column_letter] = dim


wb = openpyxl.Workbook()
ws = wb.active
ws.append(("Long Column Header 1", "Even Longer Column Header 2"))
ws.append(("some data", "more data"))
columns_best_fit(ws)
wb.save("column_width_test.xlsx")

但是,当我打开生成的文件时,列只稍微宽了一点,但肯定不是最合适的。

推荐答案

经过多个小时的研究,终于找到了。

注意:在下面的代码中,Sheet是工作表名称。通常在文档中,我们可以将其视为ws。请不要忘记更改工作表名称。

# Imorting the necessary modules
try:
        from openpyxl.cell import get_column_letter
except ImportError:
        from openpyxl.utils import get_column_letter
        from openpyxl.utils import column_index_from_string
from openpyxl import load_workbook
import openpyxl
from openpyxl import Workbook



for column_cells in sheet.columns:
    new_column_length = max(len(str(cell.value)) for cell in column_cells)
    new_column_letter = (get_column_letter(column_cells[0].column))
    if new_column_length > 0:
        sheet.column_dimensions[new_column_letter].width = new_column_length*1.23

更新:此代码不适用于所有人,但请不要犹豫尝试。

这篇关于如何在OpenPYXL中将列宽设置为Best Fit的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-27 20:23