python使用OpenPyXl库对Excel进行操作
python使用OpenPyXl库对Excel进行操作
参考:知乎文章 / OpenPyXL教程 / 博客园
目录
1. 基本概念
在OpenPyXl中的基本改变跟Excel文件中是完全一致的。
workbook | sheet | cell |
---|---|---|
工作表 | 工作簿 | 单元格 |
相当于是一个Excel文件 | 每个文件都都可以包含多个表单 | 每个可以填写数据的小格就是单元格 |
2. 判断文件是否存在
判断文件是否存在的方法并没有用到OpenPyXl库,但是在实际场景中比较容易遇见,所以我也就补充在了这里。
例如,有时判断该文件是否存在,如果存在就在文件中添加新行进行数据写入,如果不存在就先创建一个Excel文件,再进行数据写入。
file_name = 'test.xlsx'
if os.path.exists(file_name):
print("文件存在")
else:
print("文件不存在")
3. 创建和打开Excel文件
3.1. 创建Excel文件
from openpyxl import Workbook
import os
file_name = 'test.xlsx'
wb = Workbook() # 创建一个workbook对象
ws = wb.active # 创建workbook会将第一个sheet激活,通过 wb.active获取引用
wb.save(file_name)
3.2. 打开已有的Excel文件
from openpyxl import load_workbook
import os
file_name = 'test.xlsx'
wb = load_workbook(file_name) # 无非是调用的函数存在区别
ws = wb.active
wb.save(file_name)
4. 储存数据
我感觉这部分内容并不足以作为一个单独的标题,但是我用到了,所以单独把它拎出来写了一下。
ws['A1'] = 123.11 # 调整对应单元格的内容
ws.append([1, 2, 3]) # 在Excel表中添加新行
5. sheet操作
通过一段代码来展示sheet操作相关的功能:
- 创建sheet
- 修改sheet名称
- 设置sheet标签背景色
- 查看所有sheet的名称
- 获取sheet
- 复制sheet
- 删除sheet
from openpyxl import load_workbook
import os
file_name = 'test.xlsx'
wb = load_workbook(file_name)
ws1 = wb.create_sheet("sheet") # 创建sheet,默认插在后面
ws1.title = "新表单" # 设置sheet标题
ws2 = wb.create_sheet("mysheet", 0) # 创建一个sheet,插入到最前面
ws2.sheet_properties.tabColor = "1072BA" # 设置sheet标签背景色
ws3 = wb.copy_worksheet(ws2) # ws3为ws2的复制
print(wb.sheetnames) # 查看该文件所有的sheet名称
ws4 = wb.get_sheet_by_name(u"新表单") # 根据名称获取sheet
wb.remove(ws1) # 删除sheet ws1
6. cell操作
- 单独操作
- 批量操作
- 合并单元格
from openpyxl import load_workbook
import os
file_name = 'test.xlsx'
wb = load_workbook(file_name)
ws = wb.active
c = ws['A1'] # 通过单元格名称访问
d = ws.cell(row=4, column=2, value=10) # 通过行列坐标访问
# 操作单列
for cell in ws["A"]:
print(cell.value)
# 操作单行
for cell in ws["1"]:
print(cell.value)
# 操作多列
for column in ws['A:C']:
for cell in column:
print(cell.value)
# 操作多行
for row in ws['1:3']:
for cell in row:
print(cell.value)
# 指定范围
for row in ws['A1:C3']:
for cell in row:
print(cell.value)
# 所有行
for row in ws.iter_rows():
for cell in row:
print(cell.value)
# 所有列
for column in ws.iter_cols():
for cell in column:
print(cell.value)
# 合并
ws.merge_cells('A2:D2')
# 解除合并
ws.unmerge_cells('A2:D2')
# 合并
ws.merge_cells(start_row=2,start_column=1,end_row=2,end_column=4)
# 解除合并
ws.unmerge_cells(start_row=2,start_column=1,end_row=2,end_column=4)