Python酷库之旅-第三方库openpyxl(20)

目录

一、 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")

五、推荐阅读

1、Python筑基之旅
2、Python函数之旅
3、Python算法之旅
4、Python魔法之旅
5、博客个人主页

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/864608.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

架构练习题目

【2022下架构真题第24题:红色】 24.在分布式系统中,中间件通常提供两种不同类型的支持,即(27) A.数据支持和交互支持 B.交互支持和提供公共服务 C.数据支持和提供公共服务 D.安全支持和提供公共服务 解答:答案选择B。…

【知识图谱系列】(实例)python操作neo4j构建企业间的业务往来的知识图谱

本章节通过聚焦于"金额"这一核心属性,构建了一幅知识图谱,旨在揭示"销售方"与"购买方"间的商业互动网。在这张图谱中,绿色节点象征着购买方,而红色节点则代表了销售方。这两类节点间的紧密连线&…

苹果手机+AI手机概念股名单一览表

苹果智能将成为AI手机引领者,推动原生智能加速渗透,据Canlys预计2025年iOS操作系统将占据全球AI手机出货的55%。 AI手机端侧算力提升,将带动产业链部件升级创新 端侧算力提升或带动手机芯片及零部件升级,如 1)SoC芯片&…

无人机智能追踪反制系统技术详解

随着无人机技术的飞速发展,无人机在各个领域的应用越来越广泛。然而,无人机的无序飞行和非法使用也带来了一系列安全隐患和威胁。因此,无人机智能追踪反制系统应运而生,成为维护公共安全和防止无人机滥用的重要工具。本文将详细介…

Java Lambda语法介绍

目录 一、概述 二、Lambda语法的历史 2.1 Lambda名字的含义 2.2 Lambda的历史 三、Lambda语法的核心接口 3.1 Lambda的四大核心接口 3.1.1 概述 3.1.2 Consumer 接口 3.1.3 Supplier 接口 3.1.4 Function 接口,> 3.1.5 Predicate 接口 四、Lambda的引用 4.1 概…

云海中的坚固灯塔:等保测评视角下的混合云安全策略与合规性深度剖析

在数字化浪潮的推动下,混合云架构以其独特的优势成为企业转型升级的得力助手。然而,随着数据资产向云端迁移,安全风险与合规挑战亦如影随形,成为企业前行的绊脚石。等保测评作为我国网络安全的一道坚实屏障,对于护航云…

Gartner发布软件供应链安全指南:软件供应链攻击造成的损失将从 2023 年的460亿美元上升到2031年的1380亿美元

软件供应链安全是一个关键的风险和合规性问题,但大多数组织都以分散的方式处理它。缺乏一个包罗万象的框架会遗留安全漏洞。通过实施三支柱框架,安全和风险管理领导者可以确保广泛的保护。 主要发现 对软件供应链的攻击给组织带来重大的安全、监管和运营…

【深度学习】pytorch训练中的一个大坑

使用的命令:iostat -x 5 可以看到 ssd的利用率已经满了。 之前在的数据集放在了 hdd上,训练结果特别慢。 所以我把它移动到了ssd上,然后训练参数用的 resume, 但是!!!!它把历史记住…

【C语言】19.预处理详解

文章目录 1.预定义符号2.#define定义常量3.#define定义宏4.带有副作用的宏参数5.宏替换的规则6.宏函数的对比7.#和##7.1 #运算符7.2 ## 运算符 8.命名约定9.#undef10.命令行定义11.条件编译12.头文件的包含12.1 头⽂件被包含的⽅式12.1.1 本地⽂件包含12.1.2 库⽂件包含 12.2 嵌…

甲骨文首次将LLMs引入数据库,集成Llama 3和Mistral,和数据库高效对话

信息时代,数据为王。数据库作为数据存储&管理的一种方式,正在以势不可挡的趋势与AI结合。 前有OpenAI 收购了数据库初创公司 Rockset,引发广泛关注;Oracle公司(甲骨文)作为全球最大的信息管理软件及服…

计算机硬件(考点篇)试题

波特率: 在电子通信领域,波特(Baud)即调制速率,指的是有效数据讯号调制载波的速率,即单位时间内载波调制状态变化的次数。波特(Baud,单位符号:Bd)。 波特率…

PHP景区旅游多商户版微信小程序系统源码

解锁景区新玩法!​ 引言:一站式旅行新体验 厌倦了传统景区的单调游览?想要一次旅行就能体验多种风情?那么,“景区旅游多商户版”绝对是你的不二之选!这个创新模式将景区内多个商户资源整合,为…

【MySQL备份】Percona XtraBackup增量备份实战篇

目录 1.前言 2.准备工作 2.1.环境信息 2.2.创建备份目录 2.3.配置/etc/my.cnf文件 2.4.授予root用户BACKUP_ADMIN权限 3.增量备份 3.1.第一步:全量备份 3.2.第二步:增量备份 3.3.第三步:再次增量备份 4.准备备份 4.1.准备全量备…

windows自带的性能采集配置方法

1 计算机---右键---管理 2 性能--数据收集器几---用户自定义 3新建--输入程序名称 并在此页面选择--手动创建(高级) 4 下一步--勾选性能计数器---下一步 5 添加--找到process Processor Time User Time Handle Count ID Process Private Bytes…

爬虫逆向实战(42)-某巢登陆(AES、MD5、RSA、滑块验证码)

一、数据接口分析 主页地址:某巢 1、抓包 通过抓包可以发现在登录时,网站首先请求captcha/querySlideImage/来获取滑块验证码的图片,然后请求captcha/checkCode/接口来验证滑块验证码。滑块验证码校验成功后,请求noshiro/getPu…

理解MySQL核心技术:存储过程与函数的强大功能

在大型应用程序和复杂的数据库操作中,存储过程与函数扮演着至关重要的角色。它们不仅可以提高代码的可维护性,还能加强数据库的安全性和性能。本篇文章将深入探讨MySQL存储过程与函数的基础知识、创建、管理及其在实际应用中的优势。 什么是存储过程和函…

无人机热成像分析图谱原理

一、热成像原理 热成像,也称为红外热成像或红外成像,是一种利用红外辐射(通常指的是热辐射)来获取物体表面温度分布信息的成像技术。在无人机上集成热成像传感器,可以远程捕获并分析目标物体的热特征,不受…

【高性能服务器】多线程并发模型

🔥博客主页: 我要成为C领域大神🎥系列专栏:【C核心编程】 【计算机网络】 【Linux编程】 【操作系统】 ❤️感谢大家点赞👍收藏⭐评论✍️ 本博客致力于知识分享,与更多的人进行学习交流 ​​ 对于常见的C/…

ROS2使用Python开发动作通信

1.创建接口节点 cd chapt4_ws/ ros2 pkg create robot_control_interfaces --build-type ament_cmake --destination-directory src --maintainer-name "joe" --maintainer-email "1027038527qq.com" mkdir -p src/robot_control_interfaces/action touch…

跨模型知识融合:大模型的知识融合

大模型(LLMs)在多个领域的应用日益广泛,但确保它们的行为与人类价值观和意图一致却充满挑战。传统对齐方法,例如基于人类反馈的强化学习(RLHF),虽取得一定进展,仍面临诸多难题&#…