我已经在工作表中填充了一些数据,并且我正在尝试使列宽度假设最适合,如下所示。基本上是双击列宽调整分隔符时发生的自动调整。
这是我的最小示例,就我对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")
Run Code Online (Sandbox Code Playgroud)
然而,当我打开生成的文件时,列只是稍微宽一点,但肯定不是最合适的。
Mou*_*esh 14
经过几个小时的研究,我终于找到了。
注意:在下面的代码中,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
Run Code Online (Sandbox Code Playgroud)
更新:此代码并不适用于所有人,但请毫不犹豫地尝试一下
小智 -1
我用过一些这样的:
from openpyxl.worksheet.dimensions import ColumnDimension
wb = Workbook()
ws = wb.active
ColumnDimension(ws, bestFit=True)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
26700 次 |
| 最近记录: |