赞
踩
目录
3-247、设定/删除单元格的输入规则和信息提示(有效性设置)
openpyxl库的由来可以总结为以下几点:
在openpyxl库诞生之前,Python中缺乏一个专门用于读取和编写Office Open XML格式(如Excel 2010及更高版本的.xlsx文件)的库。
openpyxl库的创建是为了解决上述提到的Python在处理Excel文件时的不足,它的开发受到了PHPExcel团队的启发,因为openpyxl最初是基于PHPExcel的。
随着时间的推移,openpyxl逐渐发展成为一个功能强大的Python库,专门用于处理Excel文件。它支持Excel 2010及更高版本的文件格式,并提供了丰富的API,用于读取、写入、修改Excel文件。
openpyxl主要用于处理Excel 2010及更新版本的.xlsx文件。
使用openpyxl可以读取现有的Excel文件,获取数据,修改数据,并保存到新的文件中。
openpyxl允许用户按行、列或具体的单元格进行数据的读取和写入。
用户可以创建新的工作表,复制和删除现有的工作表,设置工作表的属性等。
openpyxl支持设置单元格的字体、颜色、边框等样式。
用户可以通过openpyxl创建图表、添加公式等。
openpyxl能够正确处理数字和日期格式,确保在Excel中显示正确的格式。
综上所述,openpyxl库的出现填补了Python在处理Excel文件时的空白,经过不断的发展和完善,成为了一个功能丰富、易于使用的Python库。
openpyxl库是一个用于读写Excel 2010 xlsx/xlsm/xltx/xltm文件的Python库,它基于Python,并且对于处理Excel文件提供了很多便利的功能,其主要优缺点有:
openpyxl支持.xlsx格式的Excel文件,这是Excel 2010及更高版本使用的格式,也是目前广泛使用的格式。
openpyxl提供了创建、修改和保存Excel工作簿、工作表、单元格、图表、公式、图像等功能。
openpyxl的API设计得相对直观,使得Python开发者能够很容易地掌握和使用。
openpyxl能够处理Excel文件中的很多复杂特性,如公式、样式、条件格式等,这确保了与Excel的良好兼容性。
在处理大型Excel文件时,openpyxl通常能够保持较好的性能。
openpyxl是一个开源项目,拥有活跃的社区支持和维护,这意味着开发者可以获得帮助和修复错误的快速响应。
openpyxl可以在不同的操作系统上运行,包括Windows、Linux和macOS等。
openpyxl不支持较旧的.xls格式(Excel 97-2003)。如果需要处理这种格式的文件,需要使用其他库如xlrd和xlwt(尽管这些库也面临一些兼容性和维护问题)。
虽然openpyxl支持许多Excel特性,但可能对于某些高级或特定的Excel功能支持有限或不支持。
在处理大型Excel文件时,openpyxl可能会占用较多的内存。这是因为openpyxl会将整个工作簿加载到内存中。
尽管openpyxl的文档相对完整,但对于某些高级功能或特定用例,可能缺乏足够的示例或详细解释。
openpyxl依赖于lxml和et_xmlfile这两个Python库来处理XML和Excel文件,在某些环境中,可能需要额外安装这些依赖项。
虽然openpyxl的API设计得相对直观,但对于初学者来说,可能需要一些时间来熟悉和掌握其用法。
openpyxl是一个用于读写Excel 2010 xlsx/xlsm/xltx/xltm文件的Python库。它是用Python编写的,不需要Microsoft Excel,并且支持多种Excel数据类型,包括图表、图像、公式等,其主要用途有:
你可以使用openpyxl来读取 Excel 文件中的数据,如单元格值、工作表名称、公式等,它支持多种数据类型,如字符串、数字、日期等。
使用openpyxl,你可以创建新的Excel文件或向现有文件添加数据,你可以设置单元格的字体、颜色、边框等样式,你还可以添加图表、图像和其他复杂的Excel功能。
你可以使用openpyxl来修改现有的Excel文件,如更改单元格值、添加或删除工作表等,这对于自动化数据处理和报告生成非常有用。
openpyxl可以与其他Python库和框架(如 pandas、numpy、matplotlib 等)结合使用,以自动化数据处理和分析任务。你可以编写脚本来从多个数据源收集数据,将数据整合到 Excel 文件中,并执行各种数据分析任务。
如果你正在开发需要与Excel交互的应用程序或工具,openpyxl可以提供一个强大的API来处理Excel文件,它允许你读取和写入Excel文件,而无需依赖Microsoft Excel或其他第三方库。
使用openpyxl,你可以轻松地将数据从Excel文件迁移到其他数据库或文件格式,或将其他数据源的数据导入到Excel文件中。
你可以使用openpyxl来创建模板化的Excel报告,并在需要时填充数据,这对于需要定期生成具有一致格式和布局的报告的场景非常有用。
总之,openpyxl是一个功能强大的库,可用于在Python中处理Excel文件,它提供了灵活的API来读取、写入、修改和自动化Excel文件的各个方面。
用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']
用help()函数获取openpyxl库的帮助信息
- Help on package openpyxl:
-
- NAME
- openpyxl - # Copyright (c) 2010-2024 openpyxl
-
- PACKAGE CONTENTS
- _constants
- cell (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)
-
- SUBMODULES
- constants
-
- DATA
- DEBUG = False
- DEFUSEDXML = False
- LXML = True
- NUMPY = True
- __author_email__ = 'charlie.clark@clark-consulting.eu'
- __license__ = 'MIT'
- __maintainer_email__ = 'openpyxl-users@googlegroups.com'
- __url__ = 'https://openpyxl.readthedocs.io'
-
- VERSION
- 3.1.3
-
- AUTHOR
- See AUTHORS
-
- FILE
- e:\python_workspace\pythonproject\lib\site-packages\openpyxl\__init__.py

- # 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、删除单元格区域的全部边框
- 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、设置单元格的颜色和背景
- 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-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、设置单元格的对齐方式
- 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、缩小单元格内容以全部显示
- 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-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-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-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-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-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、修改单元格的批注
- 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-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-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-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 = 0
- column = col[0].column_letter # 获取列字母
- for cell in col:
- try:
- if len(str(cell.value)) > max_length:
- max_length = len(cell.value)
- except:
- pass
- adjusted_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 = 0
- for cell in row:
- try:
- if len(str(cell.value)) > max_height:
- max_height = len(cell.value)
- except:
- pass
- adjusted_height = (max_height + 2)
- ws.row_dimensions[row[0].row].height = adjusted_height
- # 保存工作簿
- wb.save("example_adjusted_rows.xlsx")

- # 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)) + 2
- if col_letter in col_widths:
- if col_width > col_widths[col_letter]:
- col_widths[col_letter] = col_width
- else:
- col_widths[col_letter] = col_width
- # 计算并更新行高
- row_height = (len(str(cell.value)) // 10 + 1) * 15
- if row_number in row_heights:
- if row_height > row_heights[row_number]:
- row_heights[row_number] = row_height
- else:
- 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、设置单元格的大小(以磅为单位)
- 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为单位)
- 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为单位)
- 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、锁定单元格/解除单元格锁定
- 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")

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。