文章目录
使用教程
一、使用工作簿
1.1、新建工作簿
不需要提前在文件系统中创建.xlsx文件 只需要导入Workbook
类,然后开始工作即可:
from openpyxl import Workbook
wb = Workbook()
1.2、加载工作簿
openpyxl.load_workbook() 方法 来打开一个已经存在的工作簿(workbook)
from openpyxl import load_workbook
wb2 = load_workbook('test.xlsx')
print wb2.sheetnames
['Sheet2', 'New Title', 'Sheet1']
1.3 保存工作簿
最简单也是最安全的方法就是使用 Workbook 对象的 Workbook.save() 方法:
wb = Workbook()
wb.save('balances.xlsx')
这个操作将会覆写当前目录下已经存在的同名文件而不做出任何提示
1.4、保存为数据流
如果你想把文件保存为数据流, 例如, 当你使用Web应用程序 如Pyramid, Flask 或者Django 的时候,你可以提供一个 NamedTemporaryFile():
>>> from tempfile import NamedTemporaryFile
>>> from openpyxl import Workbook
>>> wb = Workbook()
>>> with NamedTemporaryFile() as tmp:
wb.save(tmp.name)
tmp.seek(0)
stream = tmp.read()
这部分还没有接触到,略过。
二、工作簿的方法和属性
2.1、获取默认的工作表
实例化一个工作簿(Workbook)后总会默认创建一个工作表(worksheet),你可以使用 Workbook.active
属性来获取它:
ws = wb.active
这个工作表默认指向索引为0,除非你手动更改为其他的值。 否则你只能使用该方法来获取第一个工作表
2.2、创建新的工作表
可以使用Workbook.create_sheet() 方法来创建新的工作表(worksheet):
ws1 = wb.create_sheet("Mysheet") # 在末尾插入(default)
# or
ws2 = wb.create_sheet("Mysheet", 0) # 在最前端插入
# or
ws3 = wb.create_sheet("Mysheet", -1) # 插入在倒数第二个位置
2.3、工作表命名
- )使用
Worksheet.title
属性来重新命名:
ws.title = "New Title"
- ) 工作表名称标签的颜色
title的默认背景色是白色. 你可以通过对Worksheet.sheet_properties.tabColor
属性赋值不同的RRGGBB
颜色代码来改变title的背景色:
ws.sheet_properties.tabColor = "1072BA"
2.4、通过名称来索引工作表
一旦你给工作表(worksheet)命名, 你就可以通过workbook的key来获取它:
ws3 = wb["New Title"]
2.5、获取工作簿中表名称
通过 Workbook.sheetnames 属性
print(wb.sheetnames)#['Mysheet2', 'New Title', 'Mysheet3', 'Mysheet1']
2.6、获取工作簿中工作表
通过 Workbook.worksheets 属性
print(wb.worksheets)#[<Worksheet "Mysheet2">, <Worksheet "New Title">, <Worksheet "Mysheet3">, <Worksheet "Mysheet1">]
2.7、迭代每个工作表
for x in wb: print(x.title, end=" ")print()
2.8、创建工作表的副本:
Workbook.copy_worksheet()
方法:
source = wb.activetarget = wb.copy_worksheet(source)
以上方法仅复制单元格(包括值、样式、超链接和注释)和某些工作表属性(包括维度、格式和属性)。所有其他工作簿/工作表属性不会复制 - 例如图像、图表。
你也 不能 在工作簿之间复制工作表。如果工作簿以只读 或者只写 模式打开,则无法复制工作表
三、工作表的相关函数和方法
3.1、访问一个单元格
-
可以直接通过工作表的坐标来访问单元格:
c = ws['A4']
这将返回 A4 的单元格,如果该单元格不存在,则创建一个单元格。
-
可以直接赋值:
ws['A4'] = 4
-
通过单元格.value 属性访问
>>> c.value = 'hello, world'>>> print(c.value)'hello, world'>>> d.value = 3.14>>> print(d.value)3.14
-
通过
Worksheet.cell()
方法d = ws.cell(row=4, column=2, value=10)
3.2、访问多个单元格
-
可以使用切片访问指定范围内单元格:
cell_range = ws['A1':'C2']
行和列的范围还可以如下这样指定:colC = ws['C']col_range = ws['C:D']row10 = ws[10]row_range = ws[5:10]
-
使用 Worksheet.iter_rows() 方法返回指定范围的行:
for col in ws.iter_rows(min_row=1, max_row=2, min_col=1, max_col=3): for cell in col: print(cell)"""<Cell Sheet1.A1><Cell Sheet1.B1><Cell Sheet1.C1><Cell Sheet1.A2><Cell Sheet1.B2><Cell Sheet1.C2>"""
-
使用 Worksheet.iter_cols() 方法将会返回指定范围的列:
for col in ws.iter_cols(min_row=1, max_row=2, min_col=1, max_col=3): for cell in col: print(cell)"""<Cell Sheet1.A1><Cell Sheet1.A2><Cell Sheet1.B1><Cell Sheet1.B2><Cell Sheet1.C1><Cell Sheet1.C2>"""
出于对性能的考虑 Worksheet.iter_cols() 方法在只读模式下是不可用的.
-
迭代使用过的单元格:
for row in ws.rows: for col in row: val = col.value if val is not None: print(col.value, end=' ') print()
3.3、获得最大列和最大行
可以获取类似于usedrange的行和列的count
print(ws.max_row)print(ws.max_column)
3.4、获取单元格的值
-
使用 Worksheet.values 属性
for row in ws.values: for value in row: print(value)
-
Worksheet.iter_rows() 和 Worksheet.iter_cols() 可以通过设置 values_only 参数来只返回单元格的值:
for row in ws.iter_rows(min_row=1, max_col=3, max_row=2, values_only=True): print(row)(None, None, None)(None, None, None)
3.5、合并单元格
。。。。。。暂时用不上,先略过,发几个优秀文章,如果用上了,再继续整理。
Python利用openpyxl来操作Excel(一) - 知乎 (zhihu.com)
openpyxl超详细笔记_不正经Python学习的博客-CSDN博客_openpyxl
使用函数
合并/取消合并单元格
插入图像
折叠(outline)
Using number formats
插入和删除行和列,移动范围内的单元格
Charts