Python3对Excel的操作、openpyxl

安装 openpyxl

 pip install openpyxl

创建excel和保存

import openpyxl

# python3 对excel的操作

wb=openpyxl.Workbook()  #实例工作簿
wb.save('test.xlsx')   #创建并且保存test.xlsx

创建新的工作表

ws1 = wb.create_sheet("Mysheet")
# -*- coding: UTF-8 -*-
import openpyxl

# python3 对excel的操作

wb=openpyxl.Workbook()

ws1 = wb.create_sheet("Mysheet")      #创建新的工作表(worksheet) 在末尾插入(default)
ws2 = wb.create_sheet("Mysheet2",0)   #在最前端插入
ws3 = wb.create_sheet("Mysheet3",-1)      # 插入在倒数第二个位置

wb_action=wb.active   #查看当前激活的工作表
print(wb_action)
wb.save('test.xlsx')

工作簿操作

# -*- coding: UTF-8 -*-
import openpyxl
# python3 对excel的操作
address_excel = 'test.xlsx'
wb = openpyxl.load_workbook(address_excel)
#查看所有工作表
print('查看所有工作表:')
print(wb.sheetnames)

#循环浏览工作表
print('循环浏览工作表:')
for sheet in wb:
    print(sheet.title)

#查看当前表
now_active = wb.active
print('查看当前工作表:',now_active)

#第一种创建工作表的方式
ws=wb.create_sheet()    #创建工作表
ws.title = "New Title3"  #给工作表命名
ws.sheet_properties.tabColor = "1072BA"  #给工作表设置背景色
#第二中创建工作表
wb.create_sheet("New Title5")    #创建工作表

wb.save(address_excel)

单元格操作

   获取单元格

import openpyxl
# python3 对excel的操作
address_excel = 'test.xlsx'
wb = openpyxl.load_workbook(address_excel)
#查看所有工作表
sh = wb['Sheet1']
c = sh['A4']
print(c)  #是返回单元格
#循环变量返回单元格
for row in  sh:
    print(row)

###################
######## 打印的结果值
###################
<Cell 'Sheet1'.A4>
(<Cell 'Sheet1'.A1>, <Cell 'Sheet1'.B1>, <Cell 'Sheet1'.C1>, <Cell 'Sheet1'.D1>)
(<Cell 'Sheet1'.A2>, <Cell 'Sheet1'.B2>, <Cell 'Sheet1'.C2>, <Cell 'Sheet1'.D2>)
(<Cell 'Sheet1'.A3>, <Cell 'Sheet1'.B3>, <Cell 'Sheet1'.C3>, <Cell 'Sheet1'.D3>)
(<Cell 'Sheet1'.A4>, <Cell 'Sheet1'.B4>, <Cell 'Sheet1'.C4>, <Cell 'Sheet1'.D4>)
(<Cell 'Sheet1'.A5>, <Cell 'Sheet1'.B5>, <Cell 'Sheet1'.C5>, <Cell 'Sheet1'.D5>)
(<Cell 'Sheet1'.A6>, <Cell 'Sheet1'.B6>, <Cell 'Sheet1'.C6>, <Cell 'Sheet1'.D6>)

 获取单元格的值

# -*- coding: UTF-8 -*-
import openpyxl
# python3 对excel的操作
address_excel = 'test.xlsx'
wb = openpyxl.load_workbook(address_excel)
#查看所有工作表
sh = wb['Sheet1']
#第一种返回单元格的值方式
c = sh['A4'].value
print('第一种返回单元格的方式',c)  #是返回单元格值
#第二种返回单元格的值方式
d=sh.cell(row=5, column=1).value
print('第二种返回单元格的方式:',d)  #返回单元格的值

#循环变量返回单元格值
for row in  sh.values:
    print(row)

#############
### 打印的结果
#############
第一种返回单元格的方式 李四2
第二种返回单元格的方式: 王五
('姓名', '性别', '年龄', '成绩')
('张氏', '男', 23, 89)
('张三', '女', 24, 90)
('李四2', '女', 25, 91)
('王五', '女', 34, 92)
('天马', '男', 33, 100)


修改和赋值单元格的值(修改值和赋值的方法是一样的)

# -*- coding: UTF-8 -*-
import openpyxl
# python3 对excel的操作
address_excel = 'test.xlsx'
wb = openpyxl.load_workbook(address_excel)
sh = wb['Sheet1']
c = sh['A4'].value
print(c)
sh['A4']="李四—修改"  #第一种修改单元格值
d = sh.cell(row=5, column=1, value='天马——修改')    #第二种修改单元格值
print(d)
sh.cell(row=6, column=1).value='王五-修改'    #第三种修改单元格值
sh.cell(row=7, column=1).value='赋值-赋值'    #修改也可以赋值
#循环变量返回单元格值
for row in  sh.values:
    print(row)

#########
### 打印结果
#########
('姓名', '性别', '年龄', '成绩')
('张氏', '男', 23, 89)
('张三', '女', 24, 90)
('李四—修改', '女', 25, 91)
('天马——修改', '女', 34, 92)
('王五-修改', '男', 33, 100)
('赋值-赋值', None, None, None)

读取的原始值

访问指定范围内单元格:

address_excel = 'test.xlsx'
wb = openpyxl.load_workbook(address_excel)
sh = wb['Sheet1']
cell_range = sh['A1':'C2']    #访问指定单元格
#循环变量返回单元格值
for row in  cell_range:
    print(row)
    for row_son in row:
        print(row_son.value)

########
## 打印结果
########

(<Cell 'Sheet1'.A1>, <Cell 'Sheet1'.B1>, <Cell 'Sheet1'.C1>)
姓名
性别
年龄
(<Cell 'Sheet1'.A2>, <Cell 'Sheet1'.B2>, <Cell 'Sheet1'.C2>)
张氏
男
23

逐行读取数据

values_only 参数来只返回单元格

# 逐行读取数据
#min_row:开始行号  max_row:结束行号
for col in sh.iter_rows(min_row=1, max_row=7,values_only=True):
     print(col)

#############
#####打印结果
#############
('姓名', '性别', '年龄', '成绩')
('张氏', '男', 23, 89)
('张三', '女', 24, 90)
('李四—修改', '女', 25, 91)
('天马——修改', '女', 34, 92)
('王五-修改', '男', 33, 100)
('赋值-赋值', None, None, None)

逐列读取数据  

values_only 参数来只返回单元格
# 逐列读取
for col in sh.iter_cols(min_col=1, max_col=3,values_only=True):
     print(col)

#########
## 打印结果
#######
('姓名', '张氏', '张三', '李四—修改', '天马——修改', '王五-修改', '赋值-赋值')
('性别', '男', '女', '女', '女', '男', None)
('年龄', 23, 24, 25, 34, 33, None)

只获取单元格的值另一种方式

for row in sh.values:
   print(row)
   for value in row:
     print(value)

##########
#### 打印
##########
('姓名', '性别', '年龄', '成绩')
姓名
性别
年龄
成绩
('张氏', '男', 23, 89)
张氏
男
23
89

插入一行、删除一行、插入一列、删除一列

import openpyxl
# python3 对excel的操作
address_excel = 'test.xlsx'
wb = openpyxl.load_workbook(address_excel)
sh = wb['Sheet1']

sh.insert_rows(7)       #插入一行
sh.delete_rows(6)       #删除一行

sh.insert_cols(3)       #插入一列
sh.delete_cols(2)       #删除一列
wb.save(address_excel)

在表的末尾添加一行数据,添加列的方式暂时还不知道(有知道的可以留言)

import openpyxl
# python3 对excel的操作
address_excel = 'test.xlsx'
wb = openpyxl.load_workbook(address_excel)
sh = wb['Sheet1']


# 添加一行到当前sheet的最底部(即逐行追加从第一行开始) iterable必须是list,tuple,dict,range,generator类型的。 1,如果是list,将list从头到尾顺序添加。 2,如果是dict,按照相应的键添加相应的键值。
sh.append(['This is A1', 'This is B1', 'This is C1'])
sh.append({'A': 'This is A1', 'C': 'This is C1'})
sh.append({1: 'This is A1', 3: 'This is C1'})
 wb.save(address_excel)

###########
### 打印结果
##########

('This is A1', 'This is B1', 'This is C1', None)
('This is A1', None, 'This is C1', None)
('This is A1', None, 'This is C1', None)

常用的字体操作和单元格设置背景色

import openpyxl
from openpyxl.styles import Font, colors, Alignment,PatternFill

# python3 对excel的操作
address_excel = 'test.xlsx'
wb = openpyxl.load_workbook(address_excel)
sh = wb['Sheet1']
#设置单元格的字体格式
font = Font(size=20,bold=False,italic=False,underline='none',color='FF000000')  


fill_1 = PatternFill("solid", fgColor="BCEE68")       #设置单元格的背景色
fill_2 = PatternFill("solid", fgColor=colors.RED)    #设置单元格的背景色 通过colors
sh['A2'].font =font     #设置字体
sh["A3"].fill = fill_1  #设置单元格背景色
sh["A4"].fill = fill_2  #设置单元格背景色
wb.save(address_excel)

常用数据查询

# 显示表名,表行数,表列数
print "Work Sheet Titile:", ws.title
print "Work Sheet Rows:", ws.max_row
print "Work Sheet Cols:", ws.max_column
wb.get_sheet_names()

openpyxl读取excel中公式的结果值

读取excel不加data_only=True会出现读取的是excel中的公式

wb = openpyxl.load_workbook(address_excel,data_only=True)

# -*- coding: UTF-8 -*-
import  openpyxl
address_excel = '/Users/qinleixing/Desktop/o2o_map/shan_dong_zhen_xin0430.xlsx'
wb = openpyxl.load_workbook(address_excel,data_only=True)
sh = wb['Sheet1']

for col in sh.iter_rows(min_row=1, max_row=7,values_only=True):
    print(col)


更多详细文档可以看这里:

http://yumos.gitee.io/openpyxl3.0/index.html#document-tutorial

  • 2
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值