当前位置:   article > 正文

Python酷库之旅-第三方库openpyxl(14)_第三方库 openpyxl-style-writer

第三方库 openpyxl-style-writer

目录

一、 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-121、通过Range属性引用不连续的多行

3-122、通过定义名称引用单元格区域

3-123、引用单元格的快捷方式

3-124、通过Cells属性引用某个单元格

3-125、通过Cells属性引用工作表的全部单元格

3-126、通过Cells属性引用连续的单元格区域

3-127、通过输入框(InputBox)引用所选择的单元格

3-128、引用活动单元格

3-129、引用已选定的单元格

3-130、引用已使用的单元格区域

3-131、引用被空白行和列包围的单元格区域

3-132、利用Office属性动态引用某个单元格

3-133、利用Office属性动态引用单元格区域

3-134、利用Office属性动态引用变更为指定大小的单元格区域

3-135、引用不包含标题行的单元格区域

3-136、引用不包含标题列的单元格区域

3-137、引用任意单元格区域的右下角单元格

3-138、引用输入了计算公式的所有单元格

3-139、引用输入了常量的所有单元格

3-140、引用输入了数字的全部单元格

五、推荐阅读

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库所有属性和方法的列表

  1. # ['DEBUG', 'DEFUSEDXML', 'LXML', 'NUMPY', 'Workbook', '__author__', '__author_email__', '__builtins__', '__cached__',
  2. # '__doc__', '__file__', '__license__', '__loader__', '__maintainer_email__', '__name__', '__package__', '__path__',
  3. # '__spec__', '__url__', '__version__', '_constants', 'cell', 'chart', 'chartsheet', 'comments', 'compat', 'constants',
  4. # 'descriptors', 'drawing', 'formatting', 'formula', 'load_workbook', 'open', 'packaging', 'pivot', 'reader', 'styles',
  5. # 'utils', 'workbook', 'worksheet', 'writer', 'xml']
2、获取openpyxl库的帮助信息

        用help()函数获取openpyxl库的帮助信息

  1. Help on package openpyxl:
  2. NAME
  3. openpyxl - # Copyright (c) 2010-2024 openpyxl
  4. PACKAGE CONTENTS
  5. _constants
  6. cell (package)
  7. chart (package)
  8. chartsheet (package)
  9. comments (package)
  10. compat (package)
  11. descriptors (package)
  12. drawing (package)
  13. formatting (package)
  14. formula (package)
  15. packaging (package)
  16. pivot (package)
  17. reader (package)
  18. styles (package)
  19. utils (package)
  20. workbook (package)
  21. worksheet (package)
  22. writer (package)
  23. xml (package)
  24. SUBMODULES
  25. constants
  26. DATA
  27. DEBUG = False
  28. DEFUSEDXML = False
  29. LXML = True
  30. NUMPY = True
  31. __author_email__ = 'charlie.clark@clark-consulting.eu'
  32. __license__ = 'MIT'
  33. __maintainer_email__ = 'openpyxl-users@googlegroups.com'
  34. __url__ = 'https://openpyxl.readthedocs.io'
  35. VERSION
  36. 3.1.3
  37. AUTHOR
  38. See AUTHORS
  39. FILE
  40. e:\python_workspace\pythonproject\lib\site-packages\openpyxl\__init__.py
3、实战案例
3-121、通过Range属性引用不连续的多行
  1. # 3-121、通过Range属性引用不连续的多行
  2. import openpyxl
  3. from openpyxl.utils import range_boundaries
  4. # 创建一个新的工作簿和工作表
  5. wb = openpyxl.Workbook()
  6. ws = wb.active
  7. # 填充一些数据
  8. for i in range(1, 11):
  9. for j in range(1, 11):
  10. ws.cell(row=i, column=j, value=f'{i},{j}')
  11. # 定义不连续的范围
  12. ranges = ['A1:B3', 'D1:E3']
  13. # 获取所有单元格对象
  14. cells = []
  15. for range_string in ranges:
  16. min_col, min_row, max_col, max_row = range_boundaries(range_string)
  17. for row in ws.iter_rows(min_row=min_row, max_row=max_row, min_col=min_col, max_col=max_col):
  18. for cell in row:
  19. cells.append(cell)
  20. # 打印所有获取的单元格的值
  21. for cell in cells:
  22. print(cell.value)
  23. # 保存工作簿
  24. wb.save('example.xlsx')
3-122、通过定义名称引用单元格区域
  1. # 3-122、通过定义名称引用单元格区域
  2. import openpyxl
  3. from openpyxl.utils import range_boundaries
  4. # 打开工作簿
  5. wb = openpyxl.load_workbook('example.xlsx')
  6. ws = wb.active
  7. # 获取定义名称的单元格区域
  8. defined_range = wb.defined_names['myelsa_1']
  9. range_string = defined_range.attr_text
  10. dest_sheet, cell_range = range_string.split('!')
  11. min_col, min_row, max_col, max_row = range_boundaries(cell_range)
  12. # 访问和打印单元格区域内的值
  13. for row in ws.iter_rows(min_row=min_row, max_row=max_row, min_col=min_col, max_col=max_col):
  14. for cell in row:
  15. print(cell.value)
3-123、引用单元格的快捷方式
  1. # 3-123、引用单元格的快捷方式
  2. # 3-123-1、使用字母和数字引用单元格
  3. import openpyxl
  4. # 创建一个新的工作簿和工作表
  5. wb = openpyxl.Workbook()
  6. ws = wb.active
  7. # 填充数据
  8. ws['A1'] = 'Hello'
  9. ws['B2'] = 'World'
  10. # 保存工作簿
  11. wb.save('shortcut_example.xlsx')
  12. # 3-123-2、使用行和列索引引用单元格
  13. # 设置单元格值
  14. ws.cell(row=3, column=3, value='Openpyxl')
  15. # 获取单元格值
  16. cell_value = ws.cell(row=3, column=3).value
  17. print(cell_value) # 输出: Openpyxl
  18. # 3-123-3、使用迭代器快速访问多个单元格
  19. # 填充一些数据
  20. for i in range(1, 6):
  21. for j in range(1, 6):
  22. ws.cell(row=i, column=j, value=f'{i},{j}')
  23. # 迭代行
  24. for row in ws.iter_rows(min_row=1, max_row=5, min_col=1, max_col=5):
  25. for cell in row:
  26. print(cell.value, end=' ')
  27. print()
  28. # 迭代列
  29. for col in ws.iter_cols(min_row=1, max_row=5, min_col=1, max_col=5):
  30. for cell in col:
  31. print(cell.value, end=' ')
  32. print()
  33. # 3-123-4、使用名称引用单元格区域
  34. import openpyxl
  35. from openpyxl.utils import range_boundaries
  36. # 打开工作簿
  37. wb = openpyxl.load_workbook('example.xlsx')
  38. ws = wb.active
  39. # 获取定义名称的单元格区域
  40. defined_range = wb.defined_names['myelsa_1']
  41. range_string = defined_range.attr_text
  42. dest_sheet, cell_range = range_string.split('!')
  43. min_col, min_row, max_col, max_row = range_boundaries(cell_range)
  44. # 访问和打印单元格区域内的值
  45. for row in ws.iter_rows(min_row=min_row, max_row=max_row, min_col=min_col, max_col=max_col):
  46. for cell in row:
  47. print(cell.value)
3-124、通过Cells属性引用某个单元格
  1. # 3-124、通过Cells属性引用某个单元格
  2. import openpyxl
  3. # 打开工作簿
  4. wb = openpyxl.load_workbook('example.xlsx')
  5. ws = wb.active
  6. def get_cell(sheet, row, col):
  7. return sheet.cell(row=row, column=col)
  8. # 使用自定义的 get_cell 函数
  9. cell = get_cell(ws, 3, 3)
  10. cell.value = 'Custom Cells Reference'
  11. # 保存工作簿
  12. wb.save('example_with_custom_cells.xlsx')
3-125、通过Cells属性引用工作表的全部单元格
  1. # 3-125、通过Cells属性引用工作表的全部单元格
  2. import openpyxl
  3. # 创建一个新的工作簿和工作表
  4. wb = openpyxl.Workbook()
  5. ws = wb.active
  6. # 向工作表添加一些数据
  7. for row in range(1, 6):
  8. for col in range(1, 6):
  9. ws.cell(row=row, column=col, value=f'R{row}C{col}')
  10. # 定义一个模拟的Cells属性函数
  11. def get_all_cells(sheet):
  12. cells = []
  13. for row in sheet.iter_rows():
  14. cells.extend(row)
  15. return cells
  16. # 获取所有单元格
  17. all_cells = get_all_cells(ws)
  18. # 打印所有单元格的值
  19. for cell in all_cells:
  20. print(f'{cell.coordinate}: {cell.value}')
  21. # 保存工作簿
  22. wb.save('example_with_all_cells.xlsx')
3-126、通过Cells属性引用连续的单元格区域
  1. # 3-126、通过Cells属性引用连续的单元格区域
  2. import openpyxl
  3. # 创建一个新的工作簿和工作表
  4. wb = openpyxl.Workbook()
  5. ws = wb.active
  6. # 向工作表添加一些数据
  7. for row in range(1, 6):
  8. for col in range(1, 6):
  9. ws.cell(row=row, column=col, value=f'R{row}C{col}')
  10. # 定义一个函数来引用连续的单元格区域
  11. def get_cell_range(sheet, start_cell, end_cell):
  12. return sheet[start_cell:end_cell]
  13. # 获取连续的单元格区域
  14. cell_range = get_cell_range(ws, 'A1', 'C3')
  15. # 打印连续单元格区域的值
  16. for row in cell_range:
  17. for cell in row:
  18. print(f'{cell.coordinate}: {cell.value}')
  19. # 修改连续单元格区域的值
  20. for row in cell_range:
  21. for cell in row:
  22. cell.value = 'Updated'
  23. # 保存工作簿
  24. wb.save('example_with_cell_range.xlsx')
3-127、通过输入框(InputBox)引用所选择的单元格
  1. # 3-127、通过输入框(InputBox)引用所选择的单元格
  2. import openpyxl
  3. from tkinter import Tk, Label, Entry, Button
  4. # 创建一个新的工作簿和工作表
  5. wb = openpyxl.Workbook()
  6. ws = wb.active
  7. # 向工作表添加一些数据
  8. for row in range(1, 6):
  9. for col in range(1, 6):
  10. ws.cell(row=row, column=col, value=f'R{row}C{col}')
  11. def get_cell_range(sheet, start_cell, end_cell):
  12. return sheet[start_cell:end_cell]
  13. def update_cells():
  14. # 获取用户输入的单元格范围
  15. start_cell = start_entry.get()
  16. end_cell = end_entry.get()
  17. # 获取连续的单元格区域
  18. cell_range = get_cell_range(ws, start_cell, end_cell)
  19. # 打印连续单元格区域的值
  20. for row in cell_range:
  21. for cell in row:
  22. print(f'{cell.coordinate}: {cell.value}')
  23. # 修改连续单元格区域的值
  24. for row in cell_range:
  25. for cell in row:
  26. cell.value = 'Updated'
  27. # 保存工作簿
  28. wb.save('example_with_input_box.xlsx')
  29. # 创建Tkinter窗口
  30. root = Tk()
  31. root.title("Cell Range Input")
  32. # 添加标签和输入框
  33. Label(root, text="Start Cell (e.g., A1):").grid(row=0, column=0)
  34. start_entry = Entry(root)
  35. start_entry.grid(row=0, column=1)
  36. Label(root, text="End Cell (e.g., C3):").grid(row=1, column=0)
  37. end_entry = Entry(root)
  38. end_entry.grid(row=1, column=1)
  39. # 添加提交按钮
  40. submit_button = Button(root, text="Update Cells", command=update_cells)
  41. submit_button.grid(row=2, columnspan=2)
  42. # 运行Tkinter主循环
  43. root.mainloop()
3-128、引用活动单元格
略,openpyxl库暂不支持此功能,需要借助其他库实现
3-129、引用已选定的单元格
略,openpyxl库暂不支持此功能,需要借助其他库实现
3-130、引用已使用的单元格区域
  1. # 3-130、引用已使用的单元格区域
  2. import openpyxl
  3. # 加载现有工作簿
  4. wb = openpyxl.load_workbook('example.xlsx')
  5. ws = wb.active
  6. # 获取已使用的单元格区域
  7. used_range = ws.dimensions
  8. print(f'Used range: {used_range}')
  9. # 解析已使用的单元格区域范围
  10. min_cell, max_cell = used_range.split(':')
  11. min_row = ws[min_cell].row
  12. min_col = ws[min_cell].column
  13. max_row = ws[max_cell].row
  14. max_col = ws[max_cell].column
  15. # 遍历已使用的单元格区域
  16. for row in ws.iter_rows(min_row=min_row, max_row=max_row, min_col=min_col, max_col=max_col):
  17. for cell in row:
  18. print(f'Cell {cell.coordinate}: {cell.value}')
  19. # 在这里进行具体操作,例如修改单元格的值
  20. # cell.value = 'Updated Value'
  21. # 保存修改后的工作簿
  22. wb.save('example_updated.xlsx')
3-131、引用被空白行和列包围的单元格区域
略,openpyxl库暂不支持此功能,需要借助其他库实现
3-132、利用Office属性动态引用某个单元格
  1. # 3-132、利用Offset属性动态引用某个单元格
  2. import openpyxl
  3. # 加载现有工作簿
  4. wb = openpyxl.load_workbook('example.xlsx')
  5. ws = wb.active
  6. # 选择初始单元格
  7. initial_cell = ws['A1']
  8. # 定义偏移量
  9. row_offset = 2 # 向下偏移2行
  10. col_offset = 3 # 向右偏移3列
  11. # 计算目标单元格
  12. target_cell = ws.cell(row=initial_cell.row + row_offset, column=initial_cell.column + col_offset)
  13. # 输出引用的单元格内容
  14. print(f'Referenced cell {target_cell.coordinate}: {target_cell.value}')
  15. # 对引用的单元格进行操作,例如修改其值
  16. target_cell.value = 'Updated based on offset'
  17. # 保存修改后的工作簿
  18. wb.save('example_updated.xlsx')
3-133、利用Office属性动态引用单元格区域
  1. # 3-133、利用Offset属性动态引用单元格区域
  2. import openpyxl
  3. from openpyxl.utils import range_boundaries
  4. # 加载现有工作簿
  5. wb = openpyxl.load_workbook('example.xlsx')
  6. ws = wb.active
  7. # 选择初始单元格区域,例如 "A1:C3"
  8. initial_range = "A1:C3"
  9. # 定义偏移
  10. row_offset = 2 # 向下偏移2行
  11. col_offset = 3 # 向右偏移3列
  12. # 计算目标单元格区域的边界
  13. min_col, min_row, max_col, max_row = range_boundaries(initial_range)
  14. target_min_row = min_row + row_offset
  15. target_max_row = max_row + row_offset
  16. target_min_col = min_col + col_offset
  17. target_max_col = max_col + col_offset
  18. # 输出引用的单元格区域内容
  19. for row in ws.iter_rows(min_row=target_min_row, max_row=target_max_row, min_col=target_min_col, max_col=target_max_col):
  20. for cell in row:
  21. print(f'Referenced cell {cell.coordinate}: {cell.value}')
  22. # 对引用的单元格区域进行操作,例如修改其值
  23. for row in ws.iter_rows(min_row=target_min_row, max_row=target_max_row, min_col=target_min_col, max_col=target_max_col):
  24. for cell in row:
  25. if cell.value is not None: # 只修改有值的单元格,或者你可以根据需要去掉这个条件
  26. cell.value = 'Updated based on offset'
  27. # 保存修改后的工作簿
  28. wb.save('example_updated.xlsx')
3-134、利用Office属性动态引用变更为指定大小的单元格区域
  1. # 3-134、利用resize属性动态引用变更为指定大小的单元格区域
  2. import openpyxl
  3. from openpyxl.utils import range_boundaries
  4. # 加载现有工作簿
  5. wb = openpyxl.load_workbook('example.xlsx')
  6. ws = wb.active
  7. # 选择初始单元格区域,例如 "A1:C3"
  8. initial_range = "A1:C3"
  9. # 定义新的尺寸
  10. new_num_rows = 5 # 新的行数
  11. new_num_cols = 4 # 新的列数
  12. # 计算调整后的单元格区域
  13. min_col, min_row, max_col, max_row = range_boundaries(initial_range)
  14. new_max_row = min_row + new_num_rows - 1
  15. new_max_col = min_col + new_num_cols - 1
  16. resized_range = ws.iter_rows(
  17. min_row=min_row,
  18. max_row=new_max_row,
  19. min_col=min_col,
  20. max_col=new_max_col
  21. )
  22. # 输出引用的单元格区域内容
  23. for row in ws.iter_rows(min_row=min_row, max_row=new_max_row, min_col=min_col, max_col=new_max_col):
  24. for cell in row:
  25. print(f'Referenced cell {cell.coordinate}: {cell.value}')
  26. # 对引用的单元格区域进行操作,例如修改其值
  27. for row in ws.iter_rows(min_row=min_row, max_row=new_max_row, min_col=min_col, max_col=new_max_col):
  28. for cell in row:
  29. cell.value = 'Resized area'
  30. # 保存修改后的工作簿
  31. wb.save('example_resized.xlsx')
3-135、引用不包含标题行的单元格区域
  1. # 3-135、引用不包含标题行的单元格区域
  2. import openpyxl
  3. from openpyxl.utils import range_boundaries
  4. # 加载现有工作簿
  5. wb = openpyxl.load_workbook('example.xlsx')
  6. ws = wb.active
  7. # 选择初始单元格区域,例如 "A1:C10"
  8. initial_range = "A1:C10"
  9. # 定义新的尺寸(例如排除标题行后的新尺寸)
  10. new_num_rows = 9 # 总行数减去标题行数
  11. new_num_cols = 3 # 列数保持不变
  12. # 计算调整后的单元格区域,排除第一行(标题行)
  13. min_col, min_row, max_col, max_row = range_boundaries(initial_range)
  14. new_min_row = min_row + 1 # 跳过标题行
  15. new_max_row = new_min_row + new_num_rows - 1
  16. resized_range = ws.iter_rows(
  17. min_row=new_min_row,
  18. max_row=new_max_row,
  19. min_col=min_col,
  20. max_col=max_col
  21. )
  22. # 输出引用的单元格区域内容
  23. for row in resized_range:
  24. for cell in row:
  25. print(f'Referenced cell {cell.coordinate}: {cell.value}')
  26. # 对引用的单元格区域进行操作,例如修改其值
  27. for row in ws.iter_rows(min_row=new_min_row, max_row=new_max_row, min_col=min_col, max_col=max_col):
  28. for cell in row:
  29. cell.value = 'Non-header area'
  30. # 保存修改后的工作簿
  31. wb.save('example_non_header.xlsx')
3-136、引用不包含标题列的单元格区域
  1. # 3-136、引用不包含标题列的单元格区域
  2. import openpyxl
  3. from openpyxl.utils import range_boundaries
  4. # 加载现有工作簿
  5. wb = openpyxl.load_workbook('example.xlsx')
  6. ws = wb.active
  7. # 选择初始单元格区域,例如 "A1:C10"
  8. initial_range = "A1:C10"
  9. # 定义新的尺寸(例如排除标题列后的新尺寸)
  10. new_num_rows = 10 # 行数保持不变
  11. new_num_cols = 2 # 总列数减去标题列数
  12. # 计算调整后的单元格区域,排除第一列(标题列)
  13. min_col, min_row, max_col, max_row = range_boundaries(initial_range)
  14. new_min_col = min_col + 1 # 跳过标题列
  15. new_max_col = new_min_col + new_num_cols - 1
  16. resized_range = ws.iter_rows(
  17. min_row=min_row,
  18. max_row=max_row,
  19. min_col=new_min_col,
  20. max_col=new_max_col
  21. )
  22. # 输出引用的单元格区域内容
  23. for row in resized_range:
  24. for cell in row:
  25. print(f'Referenced cell {cell.coordinate}: {cell.value}')
  26. # 对引用的单元格区域进行操作,例如修改其值
  27. for row in ws.iter_rows(min_row=min_row, max_row=max_row, min_col=new_min_col, max_col=new_max_col):
  28. for cell in row:
  29. cell.value = 'Non-header area'
  30. # 保存修改后的工作簿
  31. wb.save('example_non_header.xlsx')
3-137、引用任意单元格区域的右下角单元格
  1. # 3-137、引用任意单元格区域的右下角单元格
  2. import openpyxl
  3. from openpyxl.utils import range_boundaries
  4. # 加载现有工作簿
  5. wb = openpyxl.load_workbook('example.xlsx')
  6. ws = wb.active
  7. # 选择初始单元格区域,例如 "A1:C10"
  8. initial_range = "A1:C10"
  9. # 获取单元格区域的边界
  10. min_col, min_row, max_col, max_row = range_boundaries(initial_range)
  11. # 引用右下角的单元格
  12. right_bottom_cell = ws.cell(row=max_row, column=max_col)
  13. # 输出右下角单元格的信息
  14. print(f'Right bottom cell {right_bottom_cell.coordinate}: {right_bottom_cell.value}')
  15. # 对右下角单元格进行操作,例如修改其值
  16. right_bottom_cell.value = 'Right Bottom Cell'
  17. # 保存修改后的工作簿
  18. wb.save('example_right_bottom.xlsx')
3-138、引用输入了计算公式的所有单元格
  1. # 3-138、引用输入了计算公式的所有单元格
  2. import openpyxl
  3. # 加载现有工作簿
  4. wb = openpyxl.load_workbook('example.xlsx', data_only=False)
  5. ws = wb.active
  6. # 创建一个列表来存储包含公式的单元格
  7. formula_cells = []
  8. # 遍历所有单元格
  9. for row in ws.iter_rows():
  10. for cell in row:
  11. # 检查单元格是否包含公式
  12. if cell.data_type == 'f':
  13. formula_cells.append(cell)
  14. # 输出包含公式的单元格信息
  15. for cell in formula_cells:
  16. print(f'Cell {cell.coordinate} contains formula: {cell.value}')
  17. # 对包含公式的单元格进行操作,例如修改其值
  18. for cell in formula_cells:
  19. cell.value = f"Updated formula in {cell.coordinate}"
  20. # 保存修改后的工作簿
  21. wb.save('example_with_formulas.xlsx')
3-139、引用输入了常量的所有单元格
  1. # 3-139、引用输入了常量的所有单元格
  2. import openpyxl
  3. # 加载现有工作簿
  4. wb = openpyxl.load_workbook('example.xlsx', data_only=False)
  5. ws = wb.active
  6. # 创建一个列表来存储包含常量的单元格
  7. constant_cells = []
  8. # 遍历所有单元格
  9. for row in ws.iter_rows():
  10. for cell in row:
  11. # 检查单元格是否包含常量(数值或字符串)
  12. if cell.data_type in ['n', 's']:
  13. constant_cells.append(cell)
  14. # 输出包含常量的单元格信息
  15. for cell in constant_cells:
  16. print(f'Cell {cell.coordinate} contains constant: {cell.value}')
  17. # 对包含常量的单元格进行操作,例如修改其值
  18. for cell in constant_cells:
  19. cell.value = f"Updated value in {cell.coordinate}"
  20. # 保存修改后的工作簿
  21. wb.save('example_with_constants.xlsx')
3-140、引用输入了数字的全部单元格
  1. # 3-140、引用输入了数字的全部单元格
  2. import openpyxl
  3. # 加载现有工作簿
  4. wb = openpyxl.load_workbook('example.xlsx', data_only=False)
  5. ws = wb.active
  6. # 创建一个列表来存储包含数字的单元格
  7. number_cells = []
  8. # 遍历所有单元格
  9. for row in ws.iter_rows():
  10. for cell in row:
  11. # 检查单元格是否包含数字
  12. if cell.data_type == 'n':
  13. number_cells.append(cell)
  14. # 输出包含数字的单元格信息
  15. for cell in number_cells:
  16. print(f'Cell {cell.coordinate} contains number: {cell.value}')
  17. # 对包含数字的单元格进行操作,例如修改其值
  18. for cell in number_cells:
  19. cell.value = cell.value * 2 # 例如,将数字值加倍
  20. # 保存修改后的工作簿
  21. wb.save('example_with_numbers.xlsx')

五、推荐阅读

1、Python筑基之旅
2、Python函数之旅
3、Python算法之旅
4、Python魔法之旅
5、博客个人主页
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/煮酒与君饮/article/detail/855786
推荐阅读
相关标签
  

闽ICP备14008679号