目录
一、 openpyxl库的由来
1、背景
2、起源
3、发展
4、特点
4-1、支持.xlsx格式
4-2、读写Excel文件
4-3、操作单元格
4-4、创建和修改工作表
4-5、样式设置
4-6、图表和公式
4-7、支持数字和日期格式
二、openpyxl库的优缺点
1、优点
1-1、支持现代Excel格式
1-2、功能丰富
1-3、易于使用
1-4、与Excel兼容性
1-5、性能良好
1-6、社区支持
1-7、跨平台
2、缺点
2-1、不支持旧版格式
2-2、某些特性支持有限
2-3、内存占用
2-4、文档和示例可能不足
2-5、依赖关系
2-6、学习曲线
三、openpyxl库的用途
1、读取Excel文件
2、写入Excel文件
3、修改Excel文件
4、自动化
5、与Excel交互
6、数据迁移和转换
7、创建模板化的报告
四、如何学好openpyxl库?
1、获取openpyxl库的属性和方法
2、获取openpyxl库的帮助信息
3、实战案例
3-241、设置单元格区域的除对角框线以外的全部边框
3-242、删除单元格区域的全部边框
3-243、设置单元格的颜色和背景
3-244、设置单元格的格式
3-245、设置单元格的对齐方式
3-246、缩小单元格内容以全部显示
3-247、设定/删除单元格的输入规则和信息提示(有效性设置)
3-248、为单元格设置条件格式/删除条件格式
3-249、为单元格插入指向工作簿内部的超链接/删除超链接
3-250、为单元格插入指向工作簿外部的超链接/删除超链接
3-251、为单元格添加批注/删除批注
3-252、修改单元格的批注
3-253、为单元格区域定义名称/删除名称(Name属性)
3-254、为单元格区域定义名称/删除名称(Add方法)
3-255、自动调整单元格大小
3-256、自动调整工作表全部单元格的大小
3-257、设置单元格的大小(以磅为单位)
3-258、设置单元格的大小(以cm为单位)
3-259、设置单元格的大小(以in为单位)
3-260、锁定单元格/解除单元格锁定
五、推荐阅读
1、Python筑基之旅
2、Python函数之旅
3、Python算法之旅
4、Python魔法之旅
5、博客个人主页
一、 openpyxl库的由来
openpyxl库的由来可以总结为以下几点:
1、背景
在openpyxl库诞生之前,Python中缺乏一个专门用于读取和编写Office Open XML格式(如Excel 2010及更高版本的.xlsx文件)的库。
2、起源
openpyxl库的创建是为了解决上述提到的Python在处理Excel文件时的不足,它的开发受到了PHPExcel团队的启发,因为openpyxl最初是基于PHPExcel的。
3、发展
随着时间的推移,openpyxl逐渐发展成为一个功能强大的Python库,专门用于处理Excel文件。它支持Excel 2010及更高版本的文件格式,并提供了丰富的API,用于读取、写入、修改Excel文件。
4、特点
4-1、支持.xlsx格式
openpyxl主要用于处理Excel 2010及更新版本的.xlsx文件。
4-2、读写Excel文件
使用openpyxl可以读取现有的Excel文件,获取数据,修改数据,并保存到新的文件中。
4-3、操作单元格
openpyxl允许用户按行、列或具体的单元格进行数据的读取和写入。
4-4、创建和修改工作表
用户可以创建新的工作表,复制和删除现有的工作表,设置工作表的属性等。
4-5、样式设置
openpyxl支持设置单元格的字体、颜色、边框等样式。
4-6、图表和公式
用户可以通过openpyxl创建图表、添加公式等。
4-7、支持数字和日期格式
openpyxl能够正确处理数字和日期格式,确保在Excel中显示正确的格式。
综上所述,openpyxl库的出现填补了Python在处理Excel文件时的空白,经过不断的发展和完善,成为了一个功能丰富、易于使用的Python库。
二、openpyxl库的优缺点
openpyxl库是一个用于读写Excel 2010 xlsx/xlsm/xltx/xltm文件的Python库,它基于Python,并且对于处理Excel文件提供了很多便利的功能,其主要优缺点有:
1、优点
1-1、支持现代Excel格式
openpyxl支持.xlsx格式的Excel文件,这是Excel 2010及更高版本使用的格式,也是目前广泛使用的格式。
1-2、功能丰富
openpyxl提供了创建、修改和保存Excel工作簿、工作表、单元格、图表、公式、图像等功能。
1-3、易于使用
openpyxl的API设计得相对直观,使得Python开发者能够很容易地掌握和使用。
1-4、与Excel兼容性
openpyxl能够处理Excel文件中的很多复杂特性,如公式、样式、条件格式等,这确保了与Excel的良好兼容性。
1-5、性能良好
在处理大型Excel文件时,openpyxl通常能够保持较好的性能。
1-6、社区支持
openpyxl是一个开源项目,拥有活跃的社区支持和维护,这意味着开发者可以获得帮助和修复错误的快速响应。
1-7、跨平台
openpyxl可以在不同的操作系统上运行,包括Windows、Linux和macOS等。
2、缺点
2-1、不支持旧版格式
openpyxl不支持较旧的.xls格式(Excel 97-2003)。如果需要处理这种格式的文件,需要使用其他库如xlrd和xlwt(尽管这些库也面临一些兼容性和维护问题)。
2-2、某些特性支持有限
虽然openpyxl支持许多Excel特性,但可能对于某些高级或特定的Excel功能支持有限或不支持。
2-3、内存占用
在处理大型Excel文件时,openpyxl可能会占用较多的内存。这是因为openpyxl会将整个工作簿加载到内存中。
2-4、文档和示例可能不足
尽管openpyxl的文档相对完整,但对于某些高级功能或特定用例,可能缺乏足够的示例或详细解释。
2-5、依赖关系
openpyxl依赖于lxml和et_xmlfile这两个Python库来处理XML和Excel文件,在某些环境中,可能需要额外安装这些依赖项。
2-6、学习曲线
虽然openpyxl的API设计得相对直观,但对于初学者来说,可能需要一些时间来熟悉和掌握其用法。
三、openpyxl库的用途
openpyxl是一个用于读写Excel 2010 xlsx/xlsm/xltx/xltm文件的Python库。它是用Python编写的,不需要Microsoft Excel,并且支持多种Excel数据类型,包括图表、图像、公式等,其主要用途有:
1、读取Excel文件
你可以使用openpyxl来读取 Excel 文件中的数据,如单元格值、工作表名称、公式等,它支持多种数据类型,如字符串、数字、日期等。
2、写入Excel文件
使用openpyxl,你可以创建新的Excel文件或向现有文件添加数据,你可以设置单元格的字体、颜色、边框等样式,你还可以添加图表、图像和其他复杂的Excel功能。
3、修改Excel文件
你可以使用openpyxl来修改现有的Excel文件,如更改单元格值、添加或删除工作表等,这对于自动化数据处理和报告生成非常有用。
4、自动化
openpyxl可以与其他Python库和框架(如 pandas、numpy、matplotlib 等)结合使用,以自动化数据处理和分析任务。你可以编写脚本来从多个数据源收集数据,将数据整合到 Excel 文件中,并执行各种数据分析任务。
5、与Excel交互
如果你正在开发需要与Excel交互的应用程序或工具,openpyxl可以提供一个强大的API来处理Excel文件,它允许你读取和写入Excel文件,而无需依赖Microsoft Excel或其他第三方库。
6、数据迁移和转换
使用openpyxl,你可以轻松地将数据从Excel文件迁移到其他数据库或文件格式,或将其他数据源的数据导入到Excel文件中。
7、创建模板化的报告
你可以使用openpyxl来创建模板化的Excel报告,并在需要时填充数据,这对于需要定期生成具有一致格式和布局的报告的场景非常有用。
总之,openpyxl是一个功能强大的库,可用于在Python中处理Excel文件,它提供了灵活的API来读取、写入、修改和自动化Excel文件的各个方面。
四、如何学好openpyxl库?
1、获取openpyxl库的属性和方法
用print()和dir()两个函数获取openpyxl库所有属性和方法的列表
# ['DEBUG', 'DEFUSEDXML', 'LXML', 'NUMPY', 'Workbook', '__author__', '__author_email__', '__builtins__', '__cached__',
# '__doc__', '__file__', '__license__', '__loader__', '__maintainer_email__', '__name__', '__package__', '__path__',
# '__spec__', '__url__', '__version__', '_constants', 'cell', 'chart', 'chartsheet', 'comments', 'compat', 'constants',
# 'descriptors', 'drawing', 'formatting', 'formula', 'load_workbook', 'open', 'packaging', 'pivot', 'reader', 'styles',
# 'utils', 'workbook', 'worksheet', 'writer', 'xml']
2、获取openpyxl库的帮助信息
用help()函数获取openpyxl库的帮助信息
Help on package openpyxl:NAMEopenpyxl - # Copyright (c) 2010-2024 openpyxlPACKAGE CONTENTS_constantscell (package)chart (package)chartsheet (package)comments (package)compat (package)descriptors (package)drawing (package)formatting (package)formula (package)packaging (package)pivot (package)reader (package)styles (package)utils (package)workbook (package)worksheet (package)writer (package)xml (package)SUBMODULESconstantsDATADEBUG = FalseDEFUSEDXML = FalseLXML = TrueNUMPY = True__author_email__ = 'charlie.clark@clark-consulting.eu'__license__ = 'MIT'__maintainer_email__ = 'openpyxl-users@googlegroups.com'__url__ = 'https://openpyxl.readthedocs.io'VERSION3.1.3AUTHORSee AUTHORSFILEe:\python_workspace\pythonproject\lib\site-packages\openpyxl\__init__.py
3、实战案例
3-241、设置单元格区域的除对角框线以外的全部边框
# 3-241、设置单元格区域的除对角框线以外的全部边框
from openpyxl import Workbook
from openpyxl.styles import Border, Side
# 创建一个新的工作簿和工作表
wb = Workbook()
ws = wb.active
# 定义边框样式
thin_side = Side(border_style="thin", color="000000")
border = Border(left=thin_side, right=thin_side, top=thin_side, bottom=thin_side)
# 设定要应用边框的单元格区域
start_row, start_col = 2, 2
end_row, end_col = 5, 5
# 为单元格区域设置边框
for row in range(start_row, end_row + 1):for col in range(start_col, end_col + 1):cell = ws.cell(row=row, column=col)if row == start_row:cell.border = Border(top=thin_side, left=thin_side, right=thin_side)elif row == end_row:cell.border = Border(bottom=thin_side, left=thin_side, right=thin_side)else:cell.border = Border(left=thin_side, right=thin_side)
# 保存工作簿
wb.save("border_example.xlsx")
3-242、删除单元格区域的全部边框
# 3-242、删除单元格区域的全部边框
from openpyxl import Workbook
from openpyxl.styles import Border, Side
# 创建一个新的工作簿和工作表
wb = Workbook()
ws = wb.active
# 定义一个空边框样式
no_border = Border(left=Side(border_style=None),right=Side(border_style=None),top=Side(border_style=None),bottom=Side(border_style=None))
# 设定要删除边框的单元格区域
start_row, start_col = 2, 2
end_row, end_col = 5, 5
# 为单元格区域删除边框
for row in range(start_row, end_row + 1):for col in range(start_col, end_col + 1):cell = ws.cell(row=row, column=col)cell.border = no_border
# 保存工作簿
wb.save("no_border_example.xlsx")
3-243、设置单元格的颜色和背景
# 3-243、设置单元格的颜色和背景
from openpyxl import Workbook
from openpyxl.styles import PatternFill
# 创建一个新的工作簿和工作表
wb = Workbook()
ws = wb.active
# 定义填充样式
fill = PatternFill(start_color="FFFF00", # 设置背景色为黄色end_color="FFFF00",fill_type="solid")
# 设置要应用背景色的单元格区域
start_row, start_col = 2, 2
end_row, end_col = 5, 5
# 为单元格区域设置背景色
for row in range(start_row, end_row + 1):for col in range(start_col, end_col + 1):cell = ws.cell(row=row, column=col)cell.fill = fill
# 保存工作簿
wb.save("colored_cells_example.xlsx")
3-244、设置单元格的格式
# 3-244、设置单元格的格式
# 3-244-1、设置单元格的字体
from openpyxl import Workbook
from openpyxl.styles import Font
# 创建一个新的工作簿和工作表
wb = Workbook()
ws = wb.active
# 定义字体样式
font = Font(name='Arial', size=12, bold=True, italic=True, color='FF0000')
# 设置单元格字体
cell = ws['A1']
cell.value = 'Hello, Openpyxl!'
cell.font = font
# 保存工作簿
wb.save("formatted_font_example.xlsx")# 3-244-2、设置单元格的边框
from openpyxl import Workbook
from openpyxl.styles import Border, Side
# 创建一个新的工作簿和工作表
wb = Workbook()
ws = wb.active
# 定义边框样式
thin_border = Border(left=Side(style='thin'),right=Side(style='thin'),top=Side(style='thin'),bottom=Side(style='thin'))
# 设置单元格边框
cell = ws['B2']
cell.value = 'Border Example'
cell.border = thin_border
# 保存工作簿
wb.save("formatted_border_example.xlsx")# 3-244-3、设置单元格的对齐方式
from openpyxl import Workbook
from openpyxl.styles import Alignment
# 创建一个新的工作簿和工作表
wb = Workbook()
ws = wb.active
# 定义对齐方式
alignment = Alignment(horizontal='center', vertical='center')
# 设置单元格对齐方式
cell = ws['C3']
cell.value = 'Center Aligned'
cell.alignment = alignment
# 保存工作簿
wb.save("formatted_alignment_example.xlsx")# 3-244-4、设置单元格的填充颜色
from openpyxl import Workbook
from openpyxl.styles import PatternFill
# 创建一个新的工作簿和工作表
wb = Workbook()
ws = wb.active
# 定义填充样式
fill = PatternFill(start_color="FFFF00", # 黄色end_color="FFFF00",fill_type="solid")
# 设置单元格填充颜色
cell = ws['D4']
cell.value = 'Filled Color'
cell.fill = fill
# 保存工作簿
wb.save("formatted_fill_example.xlsx")# 3-244-5、综合示例
from openpyxl import Workbook
from openpyxl.styles import Font, Border, Side, Alignment, PatternFill
# 创建一个新的工作簿和工作表
wb = Workbook()
ws = wb.active
# 定义字体、边框、对齐方式和填充样式
font = Font(name='Arial', size=12, bold=True, color='FF0000')
thin_border = Border(left=Side(style='thin'),right=Side(style='thin'),top=Side(style='thin'),bottom=Side(style='thin'))
alignment = Alignment(horizontal='center', vertical='center')
fill = PatternFill(start_color="FFFF00", end_color="FFFF00", fill_type="solid")
# 设置单元格格式
cell = ws['E5']
cell.value = 'Formatted Cell'
cell.font = font
cell.border = thin_border
cell.alignment = alignment
cell.fill = fill
# 保存工作簿
wb.save("formatted_cell_example.xlsx")
3-245、设置单元格的对齐方式
# 3-245、设置单元格的对齐方式
from openpyxl import Workbook
from openpyxl.styles import Alignment
# 创建一个新的工作簿和工作表
wb = Workbook()
ws = wb.active
# 定义对齐方式
alignment = Alignment(horizontal='center', vertical='center')
# 设置单元格对齐方式
cell = ws['C3']
cell.value = 'Center Aligned'
cell.alignment = alignment
# 保存工作簿
wb.save("formatted_alignment_example.xlsx")
3-246、缩小单元格内容以全部显示
# 3-246、缩小单元格内容以全部显示
from openpyxl import Workbook
from openpyxl.styles import Alignment
# 创建一个新的工作簿和工作表
wb = Workbook()
ws = wb.active
# 设置单元格内容
cell = ws['A1']
cell.value = 'This is a very long text that needs to fit into a single cell by shrinking the font size.'
# 设置单元格对齐方式并启用缩小以适应单元格
cell.alignment = Alignment(shrinkToFit=True)
# 保存工作簿
wb.save("shrink_to_fit_example.xlsx")
3-247、设定/删除单元格的输入规则和信息提示(有效性设置)
# 3-247、设定/删除单元格的输入规则和信息提示(有效性设置)
# 3-247-1、设置单元格的输入规则和信息提示
from openpyxl import Workbook
from openpyxl.worksheet.datavalidation import DataValidation
# 创建一个新的工作簿和工作表
wb = Workbook()
ws = wb.active
# 创建一个数据有效性对象,设置为整数类型,限制范围在1到10之间
dv = DataValidation(type="whole", operator="between", formula1=1, formula2=10, showErrorMessage=True)
# 设置输入提示
dv.promptTitle = "输入规则"
dv.prompt = "请输入一个1到10之间的整数。"
dv.showInputMessage = True
# 设置错误提示
dv.errorTitle = "输入错误"
dv.error = "输入值必须在1到10之间。"
dv.showErrorMessage = True
# 将数据有效性对象添加到单元格范围内
ws.add_data_validation(dv)
dv.add(ws["A1"])
# 设置单元格的值以进行测试
ws["A1"] = 5
# 保存工作簿
wb.save("data_validation_example.xlsx")# 3-247-2、删除单元格的输入规则和信息提示
from openpyxl import load_workbook
# 加载已有的工作簿和工作表
wb = load_workbook("data_validation_example.xlsx")
ws = wb.active
# 查找并删除数据有效性对象
for dv in ws.data_validations.dataValidation:if "A1" in dv.cells:ws.data_validations.dataValidation.remove(dv)break
# 保存工作簿
wb.save("data_validation_removed_example.xlsx")
3-248、为单元格设置条件格式/删除条件格式
# 3-248、为单元格设置条件格式/删除条件格式
# 3-248-1、设置单元格的条件格式
from openpyxl import Workbook
from openpyxl.formatting.rule import ColorScale, Rule
from openpyxl.styles import Color
# 创建一个新的工作簿和工作表
wb = Workbook()
ws = wb.active
# 设置一些示例数据
for i in range(1, 11):ws[f'A{i}'] = i
# 创建一个颜色渐变规则
color_scale_rule = ColorScale(cfvo=['min', 'max'],color=[Color('FF0000'), Color('00FF00')])
# 创建一个条件格式规则对象
rule = Rule(type='colorScale', colorScale=color_scale_rule)
# 将条件格式应用到单元格范围
ws.conditional_formatting.add('A1:A10', rule)
# 保存工作簿
wb.save("conditional_formatting_example.xlsx")# 3-248-2、删除单元格的条件格式
from openpyxl import load_workbook
# 加载已有的工作簿和工作表
wb = load_workbook("conditional_formatting_example.xlsx")
ws = wb.active
# 移除条件格式
ws.conditional_formatting.remove('A1:A10')
# 保存工作簿
wb.save("conditional_formatting_removed_example.xlsx")
3-249、为单元格插入指向工作簿内部的超链接/删除超链接
# 3-249、为单元格插入指向工作簿内部的超链接/删除超链接
# 3-249-1、为单元格插入指向工作簿内部的超链接
from openpyxl import Workbook
from openpyxl.utils import get_column_letter
# 创建一个新的工作簿和工作表
wb = Workbook()
ws1 = wb.active
ws1.title = "Sheet1"
# 创建第二个工作表
ws2 = wb.create_sheet(title="Sheet2")
# 在Sheet2中写入一些示例数据
ws2['A1'] = "This is Sheet2"
# 在Sheet1的单元格A1中插入指向Sheet2单元格A1的超链接
ws1['A1'] = "Go to Sheet2"
ws1['A1'].hyperlink = "#Sheet2!A1"
ws1['A1'].style = "Hyperlink"
# 保存工作簿
wb.save("hyperlink_example.xlsx")# 3-249-2、删除单元格中的超链接
from openpyxl import load_workbook
# 加载已有的工作簿和工作表
wb = load_workbook("hyperlink_example.xlsx")
ws = wb["Sheet1"]
# 删除单元格A1中的超链接
ws['A1'].hyperlink = None
# 保存工作簿
wb.save("hyperlink_removed_example.xlsx")
3-250、为单元格插入指向工作簿外部的超链接/删除超链接
# 3-250、为单元格插入指向工作簿外部的超链接/删除超链接
# 3-250-1、为单元格插入指向工作簿外部的超链接
from openpyxl import Workbook
# 创建一个新的工作簿和工作表
wb = Workbook()
ws = wb.active
ws.title = "Sheet1"
# 在单元格A1中插入指向外部URL的超链接
ws['A1'] = "OpenAI Website"
ws['A1'].hyperlink = "https://www.openai.com"
ws['A1'].style = "Hyperlink"
# 保存工作簿
wb.save("external_hyperlink_example.xlsx")# 3-250-2、删除单元格中的超链接
from openpyxl import load_workbook
# 加载已有的工作簿和工作表
wb = load_workbook("external_hyperlink_example.xlsx")
ws = wb["Sheet1"]
# 删除单元格A1中的超链接
ws['A1'].hyperlink = None
# 保存工作簿
wb.save("hyperlink_removed_example.xlsx")
3-251、为单元格添加批注/删除批注
# 3-251、为单元格添加批注/删除批注
# 3-251-1、为单元格添加批注
from openpyxl import Workbook
from openpyxl.comments import Comment
# 创建一个新的工作簿和工作表
wb = Workbook()
ws = wb.active
ws.title = "Sheet1"
# 创建一个批注并添加到单元格A1
comment_text = "这是一个批注"
comment_author = "Author Name"
comment = Comment(comment_text, comment_author)
ws['A1'].comment = comment
# 保存工作簿
wb.save("comment_added_example.xlsx")# 3-251-2、删除单元格中的批注
from openpyxl import load_workbook
# 加载已有的工作簿和工作表
wb = load_workbook("comment_added_example.xlsx")
ws = wb["Sheet1"]
# 删除单元格A1中的批注
ws['A1'].comment = None
# 保存工作簿
wb.save("comment_removed_example.xlsx")
3-252、修改单元格的批注
# 3-252、修改单元格的批注
from openpyxl import load_workbook
from openpyxl.comments import Comment
# 加载已有的工作簿和工作表
wb = load_workbook("comment_added_example.xlsx")
ws = wb["Sheet1"]
# 检查单元格A1是否已有批注
if ws['A1'].comment:# 获取现有批注existing_comment = ws['A1'].comment# 修改批注内容new_comment_text = "这是修改后的批注"existing_comment.text = new_comment_text
else:# 如果没有批注,创建一个新的批注new_comment_text = "这是一个新的批注"comment_author = "New Author"new_comment = Comment(new_comment_text, comment_author)ws['A1'].comment = new_comment
# 保存工作簿
wb.save("comment_modified_example.xlsx")
3-253、为单元格区域定义名称/删除名称(Name属性)
# 3-253、为单元格区域定义名称/删除名称(Name属性)
# 3-253-1、定义单元格区域名称示例代码
from openpyxl import load_workbook
# 加载已有的工作簿和工作表
wb = load_workbook("example.xlsx")
ws = wb["Sheet1"]
# 为单元格区域定义名称
# 假设我们要为A1:B2区域定义名称为MyNamedRange
wb.create_named_range("MyNamedRange", ws, "A1:B2")
# 保存工作簿
wb.save("example_with_named_range.xlsx")# 3-253-2、删除单元格区域名称示例代码
from openpyxl import load_workbook
# 加载已有的工作簿
wb = load_workbook("example_with_named_range.xlsx")
# 删除名称
if "MyNamedRange" in wb.defined_names:del wb.defined_names["MyNamedRange"]
# 保存工作簿
wb.save("example_without_named_range.xlsx")
3-254、为单元格区域定义名称/删除名称(Add方法)
# 3-254、为单元格区域定义名称/删除名称(Add方法)
# 3-254-1、定义单元格区域名称示例代码
from openpyxl import load_workbook
from openpyxl.workbook.defined_name import DefinedName
# 加载已有的工作簿和工作表
wb = load_workbook("example.xlsx")
ws = wb["Sheet1"]
# 使用add方法为单元格区域定义名称
# 假设我们要为A1:B2区域定义名称为MyNamedRange
named_range = DefinedName(name="MyNamedRange", attr_text="Sheet1!$A$1:$B$2")
wb.defined_names.add(named_range)
# 保存工作簿
wb.save("example_with_named_range.xlsx")# 3-254-2、删除单元格区域名称示例代码
from openpyxl import load_workbook
# 加载已有的工作簿
wb = load_workbook("example_with_named_range.xlsx")
# 删除名称
if "MyNamedRange" in wb.defined_names:del wb.defined_names["MyNamedRange"]
# 保存工作簿
wb.save("example_without_named_range.xlsx")
3-255、自动调整单元格大小
# 3-255、自动调整单元格大小
# 3-255-1、自动调整列宽
from openpyxl import load_workbook
from openpyxl.utils import get_column_letter
# 加载工作簿和工作表
wb = load_workbook("example.xlsx")
ws = wb.active
# 遍历所有列并计算最大内容长度
for col in ws.columns:max_length = 0column = col[0].column_letter # 获取列字母for cell in col:try:if len(str(cell.value)) > max_length:max_length = len(cell.value)except:passadjusted_width = (max_length + 2)ws.column_dimensions[column].width = adjusted_width
# 保存工作簿
wb.save("example_adjusted_columns.xlsx")# 3-255-2、自动调整行高
from openpyxl import load_workbook
# 加载工作簿和工作表
wb = load_workbook("example.xlsx")
ws = wb.active
# 遍历所有行并计算最大内容高度
for row in ws.iter_rows():max_height = 0for cell in row:try:if len(str(cell.value)) > max_height:max_height = len(cell.value)except:passadjusted_height = (max_height + 2)ws.row_dimensions[row[0].row].height = adjusted_height
# 保存工作簿
wb.save("example_adjusted_rows.xlsx")
3-256、自动调整工作表全部单元格的大小
# 3-256、自动调整工作表全部单元格的大小
from openpyxl import load_workbook
from openpyxl.utils import get_column_letter
# 加载工作簿和工作表
wb = load_workbook("example.xlsx")
ws = wb.active
# 初始化列宽和行高的字典
col_widths = {}
row_heights = {}
# 遍历所有单元格
for row in ws.iter_rows():for cell in row:if cell.value:# 获取当前单元格的列字母和行号col_letter = get_column_letter(cell.column)row_number = cell.row# 计算并更新列宽col_width = len(str(cell.value)) + 2if col_letter in col_widths:if col_width > col_widths[col_letter]:col_widths[col_letter] = col_widthelse:col_widths[col_letter] = col_width# 计算并更新行高row_height = (len(str(cell.value)) // 10 + 1) * 15if row_number in row_heights:if row_height > row_heights[row_number]:row_heights[row_number] = row_heightelse:row_heights[row_number] = row_height
# 设置列宽
for col_letter, col_width in col_widths.items():ws.column_dimensions[col_letter].width = col_width
# 设置行高
for row_number, row_height in row_heights.items():ws.row_dimensions[row_number].height = row_height
# 保存工作簿
wb.save("example_adjusted.xlsx")
3-257、设置单元格的大小(以磅为单位)
# 3-257、设置单元格的大小(以磅为单位)
from openpyxl import load_workbook
from openpyxl.utils import get_column_letter
# 加载工作簿和工作表
wb = load_workbook("example.xlsx")
ws = wb.active
# 设置行高,单位为磅
def set_row_height(ws, row, height):ws.row_dimensions[row].height = height
# 设置列宽,估算单位为磅
def set_column_width(ws, col, width):col_letter = get_column_letter(col)# 经验公式:列宽单位约为字符宽度的单位ws.column_dimensions[col_letter].width = width
# 示例:设置第1行高度为20磅
set_row_height(ws, 1, 20)
# 示例:设置第1列宽度为10个字符宽度
set_column_width(ws, 1, 10)
# 保存工作簿
wb.save("example_adjusted.xlsx")
3-258、设置单元格的大小(以cm为单位)
# 3-258、设置单元格的大小(以cm为单位)
from openpyxl import load_workbook
from openpyxl.utils import get_column_letter
# 加载工作簿和工作表
wb = load_workbook("example.xlsx")
ws = wb.active
# 转换函数:厘米到磅
def cm_to_points(cm):return cm * 28.3465
# 转换函数:厘米到列宽(估算)
def cm_to_column_width(cm):# 1字符宽度约为0.1726厘米return cm / 0.1726
# 设置行高,以厘米为单位
def set_row_height_cm(ws, row, height_cm):height_points = cm_to_points(height_cm)ws.row_dimensions[row].height = height_points
# 设置列宽,以厘米为单位
def set_column_width_cm(ws, col, width_cm):width_chars = cm_to_column_width(width_cm)col_letter = get_column_letter(col)ws.column_dimensions[col_letter].width = width_chars
# 示例:设置第1行高度为2厘米
set_row_height_cm(ws, 1, 2)
# 示例:设置第1列宽度为2厘米
set_column_width_cm(ws, 1, 2)
# 保存工作簿
wb.save("example_adjusted.xlsx")
3-259、设置单元格的大小(以in为单位)
# 3-259、设置单元格的大小(以in为单位)
from openpyxl import load_workbook
from openpyxl.utils import get_column_letter
# 加载工作簿和工作表
wb = load_workbook("example.xlsx")
ws = wb.active
# 转换函数:英寸到磅
def inches_to_points(inches):return inches * 72
# 转换函数:英寸到列宽(估算)
def inches_to_column_width(inches):# 1字符宽度约为0.68英寸return inches / 0.1726
# 设置行高,以英寸为单位
def set_row_height_in(ws, row, height_in):height_points = inches_to_points(height_in)ws.row_dimensions[row].height = height_points
# 设置列宽,以英寸为单位
def set_column_width_in(ws, col, width_in):width_chars = inches_to_column_width(width_in)col_letter = get_column_letter(col)ws.column_dimensions[col_letter].width = width_chars
# 示例:设置第1行高度为1英寸
set_row_height_in(ws, 1, 1)
# 示例:设置第1列宽度为1英寸
set_column_width_in(ws, 1, 1)
# 保存工作簿
wb.save("example_adjusted.xlsx")
3-260、锁定单元格/解除单元格锁定
# 3-260、锁定单元格/解除单元格锁定
from openpyxl import load_workbook
from openpyxl.worksheet.protection import SheetProtection
# 加载工作簿和工作表
wb = load_workbook("example.xlsx")
ws = wb.active
# 锁定单元格
def lock_cell(ws, cell_coordinate):cell = ws[cell_coordinate]cell.protection = SheetProtection(locked=True)
# 解除单元格锁定
def unlock_cell(ws, cell_coordinate):cell = ws[cell_coordinate]cell.protection = SheetProtection(locked=False)
# 锁定A1单元格
lock_cell(ws, 'A1')
# 解除A2单元格锁定
unlock_cell(ws, 'A2')
# 保护工作表,使锁定生效
ws.protection.sheet = True
ws.protection.password = "your_password" # 可选:设置密码保护
# 保存工作簿
wb.save("example_protected.xlsx")