a1503818992 发表于 2023-9-15 11:29:12

excel列宽

各位大神,对文件夹下所有的excel文件,自动将列宽调整至该列最长的单元格长度,以下代码有哪些问题?
import os
from openpyxl import load_workbook

def adjust_column_width(file_path):
    # 打开 Excel 文件
    wb = load_workbook(file_path)
    ws = wb.active

    # 创建列索引到列名称的映射
    col_map = {}
    for idx, col in enumerate(ws.columns):
      col_map = col.column_letter

    # 遍历每一列
    for col_idx in range(1, ws.max_column + 1):
      # 找到每列中最长的单元格
      max_length = 0
      max_row_num = 0
      for row in ws.iter_rows(min_row=1, max_row=ws.max_row):
            cell = row
            if len(cell.value) > max_length:
                max_length = len(cell.value)
                max_row_num = row.index

      # 通过列名称访问 column_dimensions
      col_dim = ws.column_dimensions]
      col_dim.width = max_length * 2 + 1
      print(f"Adjusted column {col_idx} to width {col_dim.width}")

    # 保存修改后的 Excel 文件
    wb.save(file_path)

# 修改为你的文件夹路径
folder_path = r'D:\如意资料\BI临时导出文件\单店报表'

# 遍历文件夹中的所有 Excel 文件
for filename in os.listdir(folder_path):
    if filename.endswith('.xlsx') or filename.endswith('.xls'):
      file_path = os.path.join(folder_path, filename)
      adjust_column_width(file_path)

isdkz 发表于 2023-9-15 11:29:25

这段代码在大多数情况下应该能够正常工作,但是有以下几个问题需要注意:

1. 如果列中包含非常长的单元格,那么设置的列宽可能会太小,导致内容显示不全。

2. 如果列中包含非常短的单元格,那么设置的列宽可能会太大,导致表格过于稀疏。

3. 对于一些特殊格式的单元格,例如合并单元格,可能会导致列宽无法正确设置。

4. 该代码只能处理 .xlsx 和 .xls 格式的文件,如果文件夹中包含其他格式的文件,可能会导致程序出错。

为了解决这些问题,可以考虑使用 openpyxl 中的 auto_size_column 方法来自动调整列宽。修改后的代码如下:

import os
from openpyxl import load_workbook

def adjust_column_width(file_path):
    # 打开 Excel 文件
    wb = load_workbook(file_path)
    ws = wb.active

    # 遍历每一列
    for col in ws.columns:
      # 自动调整列宽
      max_length = 0
      column = col.column_letter
      for cell in col:
            try:
                if len(str(cell.value)) > max_length:
                  max_length = len(str(cell.value))
            except:
                pass
      adjusted_width = (max_length + 2) * 1.2
      ws.column_dimensions.width = adjusted_width

    # 保存修改后的 Excel 文件
    wb.save(file_path)

# 修改为你的文件夹路径
folder_path = r'D:\如意资料\BI临时导出文件\单店报表'

# 遍历文件夹中的所有 Excel 文件
for filename in os.listdir(folder_path):
    if filename.endswith('.xlsx') or filename.endswith('.xls'):
      file_path = os.path.join(folder_path, filename)
      adjust_column_width(file_path)


这个修改后的代码使用了 openpyxl 中的 auto_size_column 方法来自动调整列宽,而不是手动计算最长单元格的长度。同时,使用了 try-except 语句来处理一些特殊格式的单元格,例如合并单元格。最后,通过乘以一个系数来调整列宽的大小,以避免列宽过小或过大的问题。
页: [1]
查看完整版本: excel列宽