Python获取excel内容及相关操作代码实例


Posted in Python onAugust 10, 2020

Python没有自带openyxl,需要安装: pip install openyxl

打开excel文档: openyxl.load_workbook(excel地址) - 打开现有excel文件

openyxl.Workbook() - 新建一个excel文件

返回一个工作博对象

import openpyxl
wb = openpyxl.load_workbook("test.xlsx")
print(type(wb)) # <class 'openpyxl.workbook.workbook.Workbook'>

openpyxl.load_workbook()函数,传入一个存在的excel文件名称/excel文件名称+文件路径,返回一个workbook对象。

从workbook对象中获取工作表

import openpyxl
wb = openpyxl.load_workbook("test.xlsx")
# print(type(wb))  # <class 'openpyxl.workbook.workbook.Workbook'>
# 工作簿对象.sheetnames  - 获取当前工作簿中所有表的名字
# print(wb.sheetnames) ['Sheet1', 'Sheet2', 'Sheet3']
# 工作簿对象.active  - 获取当前活动表对应的Worksheet对象
# print(wb.active)  <Worksheet "Sheet1">
# 工作簿对象[表名]  - 根据表名获取指定表对象
# print(wb["Sheet2"]) <Worksheet "Sheet2">
# 表对象.title  - 获取表对象的表名
ws = wb["Sheet1"]
# print(ws.title)  Sheet1
# 表对象.max_row  - 获取表中最多有多少行
# print(ws.max_row)  15
# 表对象.max_column  - 获取表有多少列
print(ws.max_column) # 3

从表中取得单元格

import openpyxl
wb = openpyxl.load_workbook("test.xlsx")
ws = wb["Sheet1"]
# 表对象['列号行号']  - 获取指定列的指定行对应的单元格对象(单元格对象是 Cell 类的对象,列号是从A开始,行号是从1开始)
a = ws["A1"]
# print(a) # <Cell 'Sheet1'.A1>
# 单元格对象.value  - 获取单元格中的内容
print(a.value)
# 单元格对象.row - 获取行号(数字1开始)
print(a.row)
# 单元格对象.column  - 获取列号(数字1开始)
print(a.column)
# 单元格对象.coordinate  - 获取位置(包括行号和列号)
print(a.coordinate)
# 表对象.iter_rows() - 一行一行的取
row_s = ws.iter_rows()
for a in row_s:
  for i in a:
    print(i.value)
# 表对象.iter_cols()  - 列表一列的取
col_s = ws.iter_cols()
for c in col_s:
  for j in c:
    print(j.value)

用字母来指定列时会出现列Z之后用两个字母代替,可以调用表的cell()方法,传入整数作为行数和列数,第一行或者第一列的整数是1,而不是0

表对象.cell(行号,列号)

import openpyxl
wb = openpyxl.load_workbook("test.xlsx")
ws = wb["Sheet1"]
# 获取第二列的所有内容
max_row = ws.max_row
for row in range(1, max_row + 1):
  cell = ws.cell(row, 2)
  print(cell.value)

从表中取得列和行

取电子表格中一行、一列或一个矩形区域中的所有 Cell 对象

表对象[位置1:位置2] 获取指定范围内的所有单元格

import openpyxl
from openpyxl.utils import get_column_letter, column_index_from_string
wb = openpyxl.load_workbook("test.xlsx")
ws = wb["Sheet1"]
max_row = ws.max_row
column = get_column_letter(max_row)
# 获取第一列所有单元格对象
row2 = ws["A1":f"{column}1"]
ss = [(cell.coordinate, cell.value) for cells in row2 for cell in cells]
print(ss)

import openpyxl
from openpyxl.utils import get_column_letter, column_index_from_string
wb = openpyxl.load_workbook("test.xlsx")
ws = wb["Sheet1"]
max_cols = ws.max_column
column = get_column_letter(max_cols)
# 获取第一片区域所有单元格对象
row2 = ws["A1":f"{column}3"]
ss = [(cell.coordinate, cell.value) for cells in row2 for cell in cells]
print(ss)

创建并保存Excel文档

openpyxl.Workbook() - 创建空的Excel文件对应的工作薄对象

工作薄对象.save(文件路径) - 保存文件

import openpyxl
wb = openpyxl.load_workbook("test.xlsx")
ws = wb["Sheet1"]
# 修改sheet的名称
ws.title = "hello_world"
wb.save("test.xlsx")

创建和删除sheet

工作薄对象.create_sheet(title, index) - 在指定工作薄中的指定位置(默认是最后)创建指定名字的表,并返回表对象

工作薄对象.remove(表对象) - 删除工作薄中的指定表

import openpyxl
wb = openpyxl.load_workbook("test.xlsx")
wb.create_sheet()
print(wb.sheetnames)
wb.create_sheet("test1")
print(wb.sheetnames)
wb.create_sheet("test2", index=0)
print(wb.sheetnames)
wb.remove(wb["test2"])
print(wb.sheetnames)
wb.save("test.xlsx")

将数据写入表格中

import openpyxl
wb = openpyxl.load_workbook("test.xlsx")
ws = wb["hello_world"]
# 方式一
ws["A4"] = "hello_world"
# 方式二
ws.cell(4, 5).value = "hello_test"
wb.save("test.xlsx")

设置单元格样式

用表格展示数据的时候,有的时候需要对不同的数据以不同的风格进行展示从而达到分区或者强调的作用。

import openpyxl
from openpyxl.styles import Font, PatternFill, Border, Side, Alignment

# 1.打开工作薄
wb = openpyxl.load_workbook("test.xlsx")
ws = wb["hello_world"]
# 2.设置单元格字体样式
"""
Font(
  name=None,   # 字体名,可以用字体名字的字符串
  strike=None,  # 删除线,True/False
  color=None,   # 文字颜色
  size=None,   # 字号
  bold=None,   # 加粗, True/False
  italic=None,  # 倾斜,Tue/False
  underline=None # 下划线, 'singleAccounting', 'double', 'single', 'doubleAccounting'
)
"""
# 1:创建字体对象
font1 = Font(
  size=20,
  italic=True,
  color="ff0000",
  bold=True,
  strike=True
)
# 2:设置指定单元格的字体
# 单元格对象.font = 字体对象
ws["B2"].font = font1

# 3:设置单元格填充样式
"""
PatternFill(
  fill_type=None,  # 设置填充样式: 'darkGrid', 'darkTrellis', 'darkHorizontal', 'darkGray', 'lightDown', 'lightGray', 'solid', 'lightGrid', 'gray125', 'lightHorizontal', 'lightTrellis', 'darkDown', 'mediumGray', 'gray0625', 'darkUp', 'darkVertical', 'lightVertical', 'lightUp'
  start_color=None # 设置填充颜色
)
"""
fill = PatternFill(
  fill_type="solid",
  start_color="ffff00"
)
ws["B2"].fill = fill

# 设置单元格对齐样式
al = Alignment(
  horizontal="right",  # 水平向方: center 靠左:left 靠右: right
  vertical="top"     # 垂直方向: center, top, bottom
)
ws["B2"].alignment = al

# 设置边框样式
# 设置边对象(四个边可以是一样的也可以不同,如果不同就创建多个Side对象)
side = Side(border_style="thin", color="0000ff")
# 设置边框对象(left、right、top、bottom表示的是边框的四个边,这儿四个边使用的是一个边对象)
db = Border(left=side, right=side, top=side, bottom=side)
ws["B2"].border = db

# 设置单元格的宽度和高度
# 设置指定列的宽度
ws.column_dimensions["A"].width = 20
# 设置指定行的高度
ws.row_dimensions[1].height = 45

wb.save("test.xlsx")

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python之模拟鼠标键盘动作具体实现
Dec 30 Python
Python简单网络编程示例【客户端与服务端】
May 26 Python
使用Python实现windows下的抓包与解析
Jan 15 Python
djang常用查询SQL语句的使用代码
Feb 15 Python
Python multiprocessing多进程原理与应用示例
Feb 28 Python
详解python持久化文件读写
Apr 06 Python
Python对象转换为json的方法步骤
Apr 25 Python
django foreignkey外键使用的例子 相当于left join
Aug 06 Python
python接口自动化如何封装获取常量的类
Dec 24 Python
Python发送手机动态验证码代码实例
Feb 28 Python
numpy矩阵数值太多不能全部显示的解决
May 14 Python
解决pytorch 的state_dict()拷贝问题
Mar 03 Python
Python利用命名空间解析XML文档
Aug 10 #Python
Python如何定义有默认参数的函数
Aug 10 #Python
如何更换python默认编辑器的背景色
Aug 10 #Python
django前端页面下拉选择框默认值设置方式
Aug 09 #Python
解决Django响应JsonResponse返回json格式数据报错问题
Aug 09 #Python
django 获取字段最大值,最新的记录操作
Aug 09 #Python
在django中查询获取数据,get, filter,all(),values()操作
Aug 09 #Python
You might like
解析PHP中ob_start()函数的用法
2013/06/24 PHP
thinkphp的dump函数无输出实例代码
2016/11/15 PHP
PHP经典实用正则表达式小结
2017/05/04 PHP
Firefox下提示illegal character并出现乱码的原因
2010/03/25 Javascript
Extjs中TabPane如何嵌套在其他网页中实现思路及代码
2013/01/27 Javascript
JS 屏蔽键盘不可用与鼠标右键不可用的方法
2013/11/18 Javascript
jquery iframe操作详细解析
2013/11/20 Javascript
javascript处理表单示例(javascript提交表单)
2014/04/28 Javascript
JavaScript跨域方法汇总
2014/10/16 Javascript
js剪切板应用clipboardData实例解析
2016/05/29 Javascript
JavaScript运动框架 解决防抖动问题、悬浮对联(二)
2017/05/17 Javascript
layui 监听表格复选框选中值的方法
2018/08/15 Javascript
vue2.0 路由模式mode=&quot;history&quot;的作用
2018/10/18 Javascript
微信小程序使用swiper组件实现层叠轮播图
2018/11/04 Javascript
vue实现密码显示与隐藏按钮的自定义组件功能
2019/04/23 Javascript
vue项目中实现缓存的最佳方案详解
2019/07/11 Javascript
JS多个表单数据提交下的serialize()应用实例分析
2019/08/27 Javascript
vue移动端写的拖拽功能示例代码
2020/09/09 Javascript
python微信公众号之关键词自动回复
2018/06/15 Python
python和pygame实现简单俄罗斯方块游戏
2021/02/19 Python
Python中注释(多行注释和单行注释)的用法实例
2019/08/28 Python
Django框架 querySet功能解析
2019/09/04 Python
python实现KNN分类算法
2019/10/16 Python
将python包发布到PyPI和制作whl文件方式
2019/12/25 Python
PyQt5 QDockWidget控件应用详解
2020/08/12 Python
Scrapy中如何向Spider传入参数的方法实现
2020/09/28 Python
100%植物性、有机、即食餐:Sakara Life
2018/10/25 全球购物
Java工程师面试集锦之Spring框架
2013/06/16 面试题
股权收购意向书
2014/04/01 职场文书
纪念九一八事变演讲稿:勿忘国耻
2014/09/14 职场文书
民警群众路线教育实践活动对照检查材料
2014/10/04 职场文书
盗窃罪辩护词范文
2015/05/21 职场文书
2016清明节森林防火广播稿
2015/12/17 职场文书
python解决12306登录验证码的实现
2021/04/18 Python
Java框架入门之简单介绍SpringBoot框架
2021/06/18 Java/Android
MySQL命令无法输入中文问题的解决方式
2021/08/30 MySQL