|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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)
这段代码在大多数情况下应该能够正常工作,但是有以下几个问题需要注意:
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[0].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[column].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 语句来处理一些特殊格式的单元格,例如合并单元格。最后,通过乘以一个系数来调整列宽的大小,以避免列宽过小或过大的问题。
|
|