安装
$ pip install openpyxl
例子1:创建一个工作簿
from openpyxl import Workbook
wb = Workbook()
# 激活 workbook
ws = wb.active
# 数据可以直接分配到单元格中
ws['A1'] = 42
# 可以附加行,从第一列开始附加
ws.append([1,2,3])
# Python 类型会被自动转换
import datetime
ws['A3'] = datetime.datetime.now().strftime("%Y-%m-%d")
# 向A1到A10添加数据(range(10)=[0,1,2,3,4,5,6,7,8,9])
for i in range(10):
ws['D%d' % (i+1)] = i + 1
# 向excel表中输入表达式
ws['E2'] = '=SUM(A:A)'
# 保存文件
wb.save("sample.xlsx")
打开Excel如下:
例子2:打开一个工作簿
# -*- coding:utf-8 -*-
# 导入
from openpyxl import workbook
from openpyxl import load_workbook
# 打开一个工作薄
wb = load_workbook('F:/Py/Demo/Excel/sample.xlsx')
# 此处填绝对路径,填相对路径可能会报错KeyError: 'Worksheet Sheet1 does not exist.'
# 如果是在sample.xlsx同级目录下打开的终端,则可以写相对路径'sample.xlsx'
# 获取一张表
sheet = wb.get_sheet_by_name("Sheet1")
# 获取A1格的值
print sheet['A1'].value
# 获取表的最大工作行数
print sheet.max_row
# 获取表的最大工作列数
print sheet.max_column
# 打印C列的所有内容(以下格式代表不换行)
for i in sheet["C"]:
print i.value, ' ',
print ''
# 打印1行的所有内容
for i in sheet["1"]:
print i.value, ' ',
print ''
worksheet
创建工作表:
ws1 = wb.create_sheet("Mysheet") #插入到最后(default)
#或者
ws2 = wb.create_sheet("Mysheet", 0) #插入到最开始的位置
创建的sheet的名称会自动创建,按照sheet,sheet1,sheet2自动增长,通过title属性可以修改其名称:
# 更改表名
ws1.title = "New Title"
默认的sheet的tab是白色的,可以通过 RRGGBB颜色来修改sheet_properties.tabColor属性从而修改sheet tab按钮的颜色:
ws1.sheet_properties.tabColor = "1072BA"
查看所有工作表名:
sheets = wb.sheetnames
print sheets
# ['Sheet2', 'New Title', 'Sheet1']
# 遍历工作表
for sheet in wb:
print sheet.title
操作数据
操作单元格:
# 取值
c = ws['A4']
# 赋值
ws['A4'] = 4
使用openpyxl.worksheet.Worksheet.cell()
方法操作某行某列的某个值:
ws.cell(row=4,column=2,value=10)
# 创建100*100cells的工作表
for i in range(1,101):
for j in range(1,101):
ws.cell(row=i, column=j)
# 不指定值也会创建
访问多个cells
cell_range = ws['A1':'C2']
colC = ws['C']
col_range = ws['C:D']
row10 = ws[10]
row_range = ws[5:10]
也可以使用 openpyxl.worksheet.Worksheet.iter_rows()
方法:(需要指定行->行,截止列)
for row in ws.iter_rows(min_row=1,max_col=3,max_row=2)
for cell in row:
print(cell)
# <Cell Sheet1.A1>
# <Cell Sheet1.B1>
# <Cell Sheet1.C1>
# <Cell Sheet1.A2>
# <Cell Sheet1.B2>
# <Cell Sheet1.C2>
# 同理可以使用openpyxl.worksheet.Worksheet.iter_cols()
# row行,col列
如果你需要遍历所有文件的行或列,可以使用openpyxl.worksheet.Worksheet.rows()
属性:
ws = wb.active
ws['C9'] = 'hello world'
tuple(ws.rows)
# tuple() 是将列表转化成元组
#tuple()插曲
tuple([1,2,3,4])
# (1, 2, 3, 4)
tuple({1:2,3:4}) #针对字典 会返回字典的key组成的tuple
# (1, 3)
tuple((1,2,3,4)) #元组会返回元组自身
# (1, 2, 3, 4)
'''
((<Cell Sheet.A1>, <Cell Sheet.B1>, <Cell Sheet.C1>),
(<Cell Sheet.A2>, <Cell Sheet.B2>, <Cell Sheet.C2>),
(<Cell Sheet.A3>, <Cell Sheet.B3>, <Cell Sheet.C3>),
(<Cell Sheet.A4>, <Cell Sheet.B4>, <Cell Sheet.C4>),
(<Cell Sheet.A5>, <Cell Sheet.B5>, <Cell Sheet.C5>),
(<Cell Sheet.A6>, <Cell Sheet.B6>, <Cell Sheet.C6>),
(<Cell Sheet.A7>, <Cell Sheet.B7>, <Cell Sheet.C7>),
(<Cell Sheet.A8>, <Cell Sheet.B8>, <Cell Sheet.C8>),
(<Cell Sheet.A9>, <Cell Sheet.B9>, <Cell Sheet.C9>))
'''