Python实现调整Excel的内容高度

 更新时间:2026年05月17日 10:19:52   作者:清山博客  
本文介绍了一种自动调整Excel行高的Python实现方法,代码实现了自动计算行高、批量处理多个Excel文件的功能并提供了进度提示,希望对大家有所帮助

本文介绍了一种自动调整Excel行高的Python实现方法。通过openpyxl库遍历Excel文件中的每个工作表,计算每行文字最多单元格所需的高度(考虑字体大小、换行数和列宽),自动调整行高以确保内容完整显示。代码实现了自动计算行高、批量处理多个Excel文件的功能,并提供了进度提示。该方法可显著减少手动调整行高的工作量,特别适合处理大量数据的Excel文件。使用前需备份原文件,代码会直接修改原Excel文件。

背景介绍

有时在打印EXCEL时,单元格内容较多,需多行显示,类似这样:

在打印时,需保证单元格内的内容全部可见。需手动调整每一行高度,如果数据行很多,也是不少的工作量。

实现思路

1.利用程序遍历EXCEL中的每个Sheet,遍历每行。

2.定位该行文字最多那个单元格。

3.计算文字最多的单元格高度,单元格宽度,文字大小、换行数、预留边距计算出该行高度。

4.修改此行高度为第3步计算出的高度,使得该行所有文本可见。

实现步骤

1.安装Python操作EXCEL的库

pip install openpyxl

2.编写代码

以下代码会将代码所在文件夹下的EXCEL进行读取,并处理行高度。

注意:代码会修改原文件,操作前请备份原文件。

#pip install openpyxl


import os
from openpyxl import load_workbook
from openpyxl.utils import get_column_letter
from openpyxl.styles import Alignment

def calculate_row_height(cell, column_width, padding=5):
    """
    计算单元格内容所需的行高度
    :param cell: 单元格对象
    :param column_width: 列宽(以字符数为单位)
    :param padding: 上下留白距离(磅)
    :return: 计算后的行高度(磅)
    """
    if cell.value is None:
        return None
    
    # 获取单元格字体信息
    font = cell.font
    font_size = font.size if font.size else 11
    
    # 获取单元格内容
    text = str(cell.value)
    
    # 计算显式换行符的行数
    explicit_lines = text.count('\n') + 1
    
    # 考虑列宽计算自动换行
    if column_width > 0:
        # 计算文本总字符数(中文按2个字符计算,因为中文更宽)
        total_chars = 0
        for char in text:
            if '\u4e00' <= char <= '\u9fff':  # 中文字符范围
                total_chars += 3
            elif char == '\n':
                continue
            else:
                total_chars += 1
        
        # 根据列宽和字体大小计算每行可容纳的字符数
        # 字体越大,每行可容纳的字符数越少
        font_ratio = 11 / font_size
        chars_per_line = column_width * font_ratio
        
        if chars_per_line > 0 and total_chars > 0:
            # 计算自动换行所需的行数
            auto_wrap_lines = max(1, int((total_chars + chars_per_line - 1) / chars_per_line))
            # 取显式换行和自动换行的较大值
            total_lines = max(explicit_lines, auto_wrap_lines)
        else:
            total_lines = explicit_lines
    else:
        total_lines = explicit_lines
    
    # 行高计算:字体大小 * 行数 + 上下留白
    base_height = font_size * 1.4
    row_height = base_height * total_lines + padding * 2
    
    return row_height

def adjust_excel_row_heights(file_path):
    """
    调整Excel文件中所有行的高度
    :param file_path: Excel文件路径
    """
    try:
        # 加载工作簿
        wb = load_workbook(file_path)
        
        for sheet_name in wb.sheetnames:
            ws = wb[sheet_name]
            print(f"正在处理工作表: {sheet_name}")
            
            # 获取最大行和最大列
            max_row = ws.max_row
            max_col = ws.max_column
            
            if max_row < 2:
                print("  工作表数据不足,跳过")
                continue
            
            # 从第2行开始遍历
            for row in range(2, max_row + 1):
                max_height = None
                
                # 遍历当前行的所有单元格
                for col in range(1, max_col + 1):
                    cell = ws.cell(row=row, column=col)
                    cell.alignment = Alignment(wrap_text=True, vertical='center', horizontal='center')
                    col_letter = get_column_letter(col)
                    column_width = ws.column_dimensions[col_letter].width
                    if column_width is None or column_width == 0:
                        column_width = 8.43
                    height = calculate_row_height(cell, column_width)
                    
                    if height is not None:
                        if max_height is None or height > max_height:
                            max_height = height
                
                # 如果计算出了高度,则设置行高
                if max_height is not None:
                    ws.row_dimensions[row].height = max_height
                    # 打印进度信息(每10行打印一次)
                    if (row - 1) % 10 == 0:
                        print(f"  已处理第 {row} 行,行高设置为 {max_height:.1f} 磅")
        
        # 保存文件
        wb.save(file_path)
        print(f"文件 {file_path} 已成功保存!")
        
    except Exception as e:
        print(f"处理文件 {file_path} 时出错: {str(e)}")

if __name__ == "__main__":
    # 获取当前目录下所有xlsx文件(排除临时文件)
    xlsx_files = [f for f in os.listdir('.') if f.endswith('.xlsx') and not f.startswith('~$')]
    
    if not xlsx_files:
        print("当前目录下没有找到Excel文件")
    else:
        print(f"找到 {len(xlsx_files)} 个Excel文件")
        for file in xlsx_files:
            print(f"\n处理文件: {file}")
            adjust_excel_row_heights(file)
        print("\n处理完成!")

调整后结果

虽然使用场景不多,不过工作中遇到了,在此记录一下。

到此这篇关于Python实现调整Excel的内容高度的文章就介绍到这了,更多相关Python调整Excel内容高度内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python编写漏洞验证脚本批量测试繁琐漏洞

    Python编写漏洞验证脚本批量测试繁琐漏洞

    这篇文章主要为大家介绍了Python编写漏洞验证脚本来批量测试繁琐的漏洞实现,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步
    2022-02-02
  • python实现代码审查自动回复消息

    python实现代码审查自动回复消息

    这篇文章主要介绍了python实现代码审查回复消息生成的示例,帮助大家更好的理解和学习python,感兴趣的朋友可以了解下
    2021-02-02
  • Python 利用base64库 解码本地txt文本字符串

    Python 利用base64库 解码本地txt文本字符串

    这篇文章主要介绍了Python 利用base64库 解码本地txt文本字符串的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-04-04
  • Python协程的实现方式小结

    Python协程的实现方式小结

    协程是Python中强大的并发编程工具,允许开发者编写异步代码以提高程序的性能和效率,在本文中,我们将深入探讨Python中协程的实现方式,包括生成器、asyncio库和async/await关键字,我们还会提供详细的示例代码,帮助您理解和应用协程,需要的朋友可以参考下
    2023-11-11
  • python rpyc客户端调用服务端方法的注意说明

    python rpyc客户端调用服务端方法的注意说明

    这篇文章主要介绍了python rpyc客户端调用服务端方法的注意说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-06-06
  • Python数据结构与算法之二叉树结构定义与遍历方法详解

    Python数据结构与算法之二叉树结构定义与遍历方法详解

    这篇文章主要介绍了Python数据结构与算法之二叉树结构定义与遍历方法,结合实例形式详细分析了Python实现二叉树结构的定义、遍历方法及相关注意事项,需要的朋友可以参考下
    2017-12-12
  • 跟老齐学Python之使用Python操作数据库(1)

    跟老齐学Python之使用Python操作数据库(1)

    本文详细讲述了使用python操作数据库所需要了解的知识以及准备工作,十分的详尽,这里推荐给想学习python的小伙伴。
    2014-11-11
  • python读取Excel实例详解

    python读取Excel实例详解

    这篇文章主要为大家详细介绍了python读取Excel的实例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-08-08
  • TensorFlow实现随机训练和批量训练的方法

    TensorFlow实现随机训练和批量训练的方法

    本篇文章主要介绍了TensorFlow实现随机训练和批量训练的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-04-04
  • Python使用pandas对数据进行差分运算的方法

    Python使用pandas对数据进行差分运算的方法

    今天小编就为大家分享一篇Python使用pandas对数据进行差分运算的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-12-12

最新评论