openpyxl常用用法

openpyxl是一个用于读写Excel 2010 xlsx/xlsm文件的Python库。本文介绍了如何使用openpyxl进行工作簿、工作表、行/列以及单元格的基本操作,包括创建、读取、保存、删除、合并和拆分等,并展示了如何进行表格显示、公式应用和非文本内容(如图片)的处理。通过这个库,你可以高效地进行Excel文件的管理和编辑。

openpyxl简介

openpyxl是一个Python的实用第三方库,用户读取/写入后缀为xlsx / xlsm / xltx / xltm的Excel表格文件。

  • openpyxl官方文档

openpyxl - A Python library to read/write Excel 2010 xlsx/xlsm files — openpyxl 3.0.9 documentation

表格基本操作

  • 导入openpyxl库

import openpyxl

对工作簿操作

  • 打开工作簿

wb = load_workbook(filename='文件路径', data_only=False)

filename: 文件路径

data_only: 默认为False,以Excel公式的形式读取;当为True的时候以值的形式读取

  

  • 创建工作簿

wb = Workbook()
  • 保存工作簿

wb.save('文件路径')

对工作表操作

  • 打开活动工作表

ws = wb.active
  • 打开指定名称工作表

ws = wb['工作表名']
  • 创建新工作表

ws = wb.create_sheet('新工作表名')

括号里不传递名字的话,会默认用Sheet、Sheet1、Sheet2……命名

  • 修改工作表名称

ws.title = '新工作表名'
  • 查看所有工作表的名称

wb.sheetnames

返回值是所有工作表名称组成的列表['Sheet1', 'Sheet2', 'Sheet3']

  • 获取工作表的数据范围

获取最大行

max_row = ws.max_row

获取最大列

max_col = ws.max_column
  • 删除工作表

wb.remove(ws)
  • 复制工作表(创建副本)

source = wb.active
target = wb.copy_worksheet(source)

把source创建一个副本,并用target表示

  • 修改工作表标签颜色

# 如:ws.sheet_properties.tabColor = "1072BA"
ws.sheet_properties.tabColor = '颜色十六进制码'

对行/列操作

  • 在最后添加一行数据

# 可迭代对象有列表、元组
ws.append(可迭代对象)
  • 插入行/列

ws.insert_rows(要添加的行, 插入的行数)
ws.insert_cols(要添加的列, 插入的列数)
  • 删除行/列

ws.delete_rows(开始行, 删除的行数)
ws.delete_cols(开始列, 删除的列数)

对单元格操作

  • 访问单个单元格

    • 使用索引
# 如取第A1单元格:c = ws['A1']
c = ws['单元格位置']
    • 使用ws.cell()方法
# 如取A1单元格:c = ws.cell(1, 1)
c = ws.cell(行, 列)
  • 访问多个单元格

# 如取A1到C2单元格:cell_range = ws['A1':'C2']
cell_range = ws['首单元格':'末单元格']
  • 获取单元格的值

    • 使用索引
# 如取第A1单元格的值:cv = ws['A1'].value
cv = ws['单元格位置'].value
    • 使用ws.cell()方法
# 如取A1单元格:cv = ws.cell(1,1).value
cv = ws.cell(行, 列).value
  • 向单元格里写入值

# 单元格对象为上方的c
单元格对象.value = 值
  • 按行遍历获取单元格

for row in ws.iter_rows(min_row=1, max_row=1, min_col=1, max_col=1, values_only=False):
    print(row)

row为每行单元格组成的元组

min_row: 最小行

max_row: 最大行

min_col: 最小列

max_col: 最大列

values_only: 默认为False,以单元格对象返回;当为True时,以单元格值返回

  • 按列遍历获取单元格

for col in ws.iter_cols(min_row=1, max_row=1, min_col=1, max_col=1, values_only=False):
    print(col)

col为每列单元格组成的元组

min_row: 最小行

max_row: 最大行

min_col: 最小列

max_col: 最大列

values_only: 默认为False,以单元格对象返回;当为True时,以单元格值返回

  • 合并单元格

# 如合并A1到C2: ws.merge_cells('A1:C2')
ws.merge_cells('首格:末格')

# 另一种方法,合并A1到B2的单元格
ws.merge_cells(start_row=1, start_column=1, end_row=2, end_column=2)

start_row: 开始行

srart_column: 开始列

end_row: 结束行

end_column: 结束列

  • 拆分合并单元格

# 如拆分A1到C2: ws.unmerge_cells('A1:C2')
ws.unmerge_cells('首格:末格')

# 另一种方法,拆分A1到B2的单元格
ws.unmerge_cells(start_row=1, start_column=1, end_row=2, end_column=2)

start_row: 开始行

srart_column: 开始列

end_row: 结束行

end_column: 结束列

表格进阶操作

表格显示操作

  • 移动覆盖数据区域

# 将D4到F10向上移动1行,向右移动2列
ws.move_range("D4:F10", rows=-1, cols=2)
  • 冻结行/列

# 如冻结B列和第2行: ws.freeze_panes = 'B2'
ws.freeze_panes = '作为基准的单元格'
  • 隐藏行/列

# 隐藏A到D列
ws.column_dimensions.group('A', 'D', hidden=True)
# 隐藏1到10行
ws.row_dimensions.group(1, 10, hidden=True)

Excel公式操作

  • 使用Excel公式

# 如求和: ws["A1"] = "=SUM(1, 1)"
ws['单元格位置'] = '=Excel公式'

非文本内容操作

  • 插入图片

from openpyxl.drawing.image import Image
img = Image('图片文件')
ws.add_image(img, '单元格位置') 

巧记忆

 

### Python 对 XLSM 文件进行读写操作 对于带有 VBA 宏的 Excel 文件 (XLSM),使用 `pandas` 结合 `openpyxl` 可以实现文件的读取与保存,同时保持宏代码不丢失。 #### 使用 Pandas 和 Openpyxl 读取 XLSM 文件 为了确保能够正确处理含有宏的工作簿,在读取时指定引擎为 `openpyxl` 并设置参数来保护现有内容: ```python import pandas as pd # 加载含VBA宏的Excel工作表 df = pd.read_excel('path_to_your_file.xlsm', engine='openpyxl', sheet_name='Sheet1') ``` 此命令会加载指定路径下的 `.xlsm` 文件,并从中提取名为 "Sheet1" 的表格数据到 DataFrame 中[^2]。 #### 向 XLSM 文件中追加或修改数据 当向现有的 .xlsm 文件添加新数据或将更改后的 DataFrame 写回到原文件时,同样需要指明使用的库以及是否要覆盖原有内容: ```python with pd.ExcelWriter('path_to_your_file.xlsm', mode='a', engine="openpyxl") as writer: df.to_excel(writer, index=False, sheet_name='NewData') # 如果是要替换整个文件,则应改变模式为'w' with pd.ExcelWriter('path_to_your_file.xlsm', mode='w', engine="openpyxl", options={'strings_to_formulas': False}) as writer: df.to_excel(writer, index=False, sheet_name='UpdatedSheetName') ``` 上述代码片段展示了如何通过调整 `mode` 参数 (`a`=追加; `w`=重写) 来决定是以追加方式还是完全替代的方式更新文档。另外需要注意的是,在某些情况下可能还需要传递额外选项给 `options` 字典以防止意外行为发生,比如将字符串解释成公式等问题[^3]。 #### 创建新的 XLSM 文件 如果目标是从头开始构建一个新的带宏支持的 Excel 工作簿,那么可以通过如下方式完成初始化过程: ```python from pandas import DataFrame data = { 'name': ['张三', '李四'], 'age': [28, 22], } df = DataFrame(data) writer = pd.ExcelWriter('new_macro_enabled_workbook.xlsm', engine='openpyxl') df.to_excel(writer, index=False, sheet_name='InitialData') writer.close() ``` 这段程序创建了一个包含两列(姓名和年龄)的新 XLSM 文件,并命名为 `new_macro_enabled_workbook.xlsm`[^4]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mez_Blog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值