鱼C论坛

 找回密码
 立即注册
查看: 579|回复: 1

[已解决]excel列宽

[复制链接]
发表于 2023-9-15 11:29:12 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
各位大神,对文件夹下所有的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[idx+1] = 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[col_idx - 1]
            if len(cell.value) > max_length:
                max_length = len(cell.value)
                max_row_num = row.index

        # 通过列名称访问 column_dimensions
        col_dim = ws.column_dimensions[col_map[col_idx]]
        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)
最佳答案
2023-9-15 11:29:25
这段代码在大多数情况下应该能够正常工作,但是有以下几个问题需要注意:

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

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

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

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

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

  1. import os
  2. from openpyxl import load_workbook

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

  7.     # 遍历每一列
  8.     for col in ws.columns:
  9.         # 自动调整列宽
  10.         max_length = 0
  11.         column = col[0].column_letter
  12.         for cell in col:
  13.             try:
  14.                 if len(str(cell.value)) > max_length:
  15.                     max_length = len(str(cell.value))
  16.             except:
  17.                 pass
  18.         adjusted_width = (max_length + 2) * 1.2
  19.         ws.column_dimensions[column].width = adjusted_width

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

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

  24. # 遍历文件夹中的所有 Excel 文件
  25. for filename in os.listdir(folder_path):
  26.     if filename.endswith('.xlsx') or filename.endswith('.xls'):
  27.         file_path = os.path.join(folder_path, filename)
  28.         adjust_column_width(file_path)
复制代码


这个修改后的代码使用了 openpyxl 中的 auto_size_column 方法来自动调整列宽,而不是手动计算最长单元格的长度。同时,使用了 try-except 语句来处理一些特殊格式的单元格,例如合并单元格。最后,通过乘以一个系数来调整列宽的大小,以避免列宽过小或过大的问题。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-9-15 11:29:25 | 显示全部楼层    本楼为最佳答案   
这段代码在大多数情况下应该能够正常工作,但是有以下几个问题需要注意:

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

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

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

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

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

  1. import os
  2. from openpyxl import load_workbook

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

  7.     # 遍历每一列
  8.     for col in ws.columns:
  9.         # 自动调整列宽
  10.         max_length = 0
  11.         column = col[0].column_letter
  12.         for cell in col:
  13.             try:
  14.                 if len(str(cell.value)) > max_length:
  15.                     max_length = len(str(cell.value))
  16.             except:
  17.                 pass
  18.         adjusted_width = (max_length + 2) * 1.2
  19.         ws.column_dimensions[column].width = adjusted_width

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

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

  24. # 遍历文件夹中的所有 Excel 文件
  25. for filename in os.listdir(folder_path):
  26.     if filename.endswith('.xlsx') or filename.endswith('.xls'):
  27.         file_path = os.path.join(folder_path, filename)
  28.         adjust_column_width(file_path)
复制代码


这个修改后的代码使用了 openpyxl 中的 auto_size_column 方法来自动调整列宽,而不是手动计算最长单元格的长度。同时,使用了 try-except 语句来处理一些特殊格式的单元格,例如合并单元格。最后,通过乘以一个系数来调整列宽的大小,以避免列宽过小或过大的问题。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-18 10:15

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表