python中openpyxl库用法详解

目录
  • 一、读取数据
    • 1.1 从工作簿中取得工作表
    • 1.2 从表中取得单元格
    • 1.3 从表中取得行和列
  • 二、写入数据
    • 2.1 创建Workbook对象来创建Excel文件并保存
    • 2.2 案例分析一 :爬取数据并保存excel中
    • 2.3 案例分析二: 操作单元格中内容样式并保存数据
    • 2.4 案例分析三:将列表数据写入excel中

openpyxl模块是一个读写Excel 文档的Python库,openpyxl是一个比较综合的工具,能够同时读取和修改Excel文档。

  • openpyxl.load_workbook(地址) - 打开给定的文件名并返回 工作簿
  • openpyxl.Workbook() - 新建一个 Workbook(工作簿)对象 ,即excel文件

一、读取数据

数据如下图所示:

示例代码:

import openpyxl

# 打开给定的文件名并返回 工作簿
data = openpyxl.load_workbook('data/体检表.xlsx')
print(type(data))
print(data)  # 返回一个 workbook 数据类型的值

运行结果:

1.1 从工作簿中取得工作表

  • 工作簿对象.sheetnames - 获取当前工作簿中 所有表的名字
  • 工作簿对象.active - 获取当前 活动表1 对应的Worksheet对象
  • 工作簿对象[表名] - 根据表名获取指定 表对象
  • 表对象.title - 获取表对象的 表名
  • 表对象.max_row - 获取表的 最大有效行数
  • 表对象.max_column - 获取表的 最大有效列数

示例代码:

import openpyxl

# 打开给定的文件名并返回 工作簿
data = openpyxl.load_workbook('data/体检表.xlsx')
print(type(data))
print(data)  # 返回一个 workbook 数据类型的值

# 获取所有表的表名
sheets_names = data.sheetnames
print(sheets_names)

# 获取活动表对应的表对象(表对象就是Worksheet类的对象)
active_sheet = data.active
print(active_sheet)

# 根据表名获取工作簿中指定的表
sheet2 = data['Sheet2']
print(sheet2)

# 根据表对象获取表的名字
sheet_name1 = active_sheet.title
sheet_name2 = sheet2.title
print(sheet_name1, sheet_name2)

# 获取第二列的所有内容
sheet = data.active
row_num = sheet.max_row  # 获取当前表中最大的行数
for row in range(1, row_num+1):
    cell = sheet.cell(row, 2)
    print(cell.value)

运行结果:

1.2 从表中取得单元格

  • 表对象['列号行号'] - 获取指定列的指定行对应的单元格对象(单元格对象是 Cell 类的对象,列号是从A开始,行号是从1开始)
  • 表对象.cell(行号, 列号) - 获取指定行指定列对应的单元格(这儿的行号和列好号都可以用数字)
  • 表对象.iter_rows() - 一行一行的取
  • 表对象.iter_cols() - 列表一列的取
  • 单元格对象.value - 获取单元格中的内容
  • 单元格对象.row - 获取行号(数字1开始)
  • 单元格对象.column - 获取列号(数字1开始)
  • 单元格对象.coordinate - 获取位置(包括行号和列号)

示例代码:

import openpyxl

# 打开给定的文件名并返回 工作簿
data = openpyxl.load_workbook('data/体检表.xlsx')
print(type(data))
print(data)  # 返回一个 workbook 数据类型的值

# 获取活跃表对象
sheet = data.active

# 获取单元格对应的 Cell 对象
a1 = sheet['A1']  # A1 表示A列中的第一行,这儿的列号采用的是从A开始的
print(a1)

# 获取单元格中的内容
content = a1.value
print(content)

# 调用表的 cell()方法时,可以传入整数 作为 row 和 column 关键字参数,也可以得到一个单元格
content2 = sheet.cell(2, 2).value
print(content2)

# 获取单元格的行和列信息
row = a1.row
print('行:', row)

column = a1.column
print('列:', column)

coordinate = a1.coordinate
print(coordinate)
print("*" * 100)

# 获取第二列的所有内容
row_num = sheet.max_row  # 获取当前表中最大的行数
for row in range(1, row_num+1):
    cell = sheet.cell(row, 2)
    print(cell.value)

运行结果:

注意:在 Z 列之后,列开始使用两个字母:AA、AB、AC 等。作为替代,在调用表的 cell()方法时,可以传入整数 作为 row 和 column 关键字参数,也可以得到一个单元格。

注意:第一行或第一列的对应的整数 是 1,不是 0。

1.3 从表中取得行和列

表对象也可以像列表或者字符串那样进行 切片 操作,来获取电子表格中一行、一列或一个 矩形区域 中的所有 Cell 对象,然后就可以对数据进行相应的操作。

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

示例代码:

import openpyxl
from openpyxl.utils import get_column_letter

# 打开给定的文件名并返回 工作簿
data = openpyxl.load_workbook('data/体检表.xlsx')
# print(type(data))
# print(data)  # 返回一个 workbook 数据类型的值

# 获取表对象
sheet = data.active

# 1.获取整个一行的单元格
max_column = sheet.max_column  # 获取最大列数
column = get_column_letter(max_column)  # 获取最大列数对应的字母列号
# 获取第一行所有单元格对象
row2 = sheet['A1':'%s1' % column]  # ((<Cell '表1'.A1>, <Cell '表1'.B1>, <Cell '表1'.C1>),)
print(row2)

for row_cells in row2:
    for cell in row_cells:
        print(cell.coordinate, cell.value)

print("*" * 100)

# 2.获取整个列的单元格
max_row = sheet.max_row
columnB = sheet['B1':'B%d' % max_row]

# 获取B列对应的所有单元格对象
for column_cells in columnB:
    for cell in column_cells:
        print(cell.coordinate, cell.value)

print("*" * 100)

# 3. 获取矩形区域中的单元格对象
cell_tuples = sheet['A1': 'C3']
print(cell_tuples)
for cells in cell_tuples:
    for cell in cells:
        print(cell.coordinate, cell.value)

运行结果:

二、写入数据

2.1 创建Workbook对象来创建Excel文件并保存

  • openpyxl.Workbook() - 创建空的 Excel 文件对应的工作簿对象
  • 工作簿对象.save(文件路径) - 保存文件
  • 工作簿对象.create_sheet(title, index) - 在指定工作簿中的指定位置(默认是最后)创建指定名字的表,并且返回表对象
  • 工作簿对象.remove(表对象) - 删除工作簿中的指定表
  • 表对象[位置] = 值 - 在表中指定位置对应的单元格中写入指定的值,位置是字符串:‘A1’(第1列的第一行)、‘B1’(第二列的第一行)

示例代码:

import openpyxl

# 创建空的Workbook对象
w_data = openpyxl.Workbook()

# 获取所有表名
print(w_data.sheetnames)  # ['Sheet']
# 可知默认情况下,新建的Workbook对象对应的Excel 文件中只有一张名字是 'Sheet' 的表

# 获取活动表
sheet_active = w_data.active

# 修改表的名字
sheet_active.title = 'first_table'

# 保存至文件
w_data.save(filename='data/info.xlsx')

# 新建表
w_data.create_sheet()
w_data.create_sheet()
# for i in range(20):
#     wb.create_sheet()
print(w_data.sheetnames)  # ['first_table', 'Sheet', 'Sheet1']
# 新建表时,从Sheet开始一直到Sheet n

w_data.create_sheet('second_table')

# `工作簿对象.create_sheet(title, index)`  - 在指定工作簿中的指定位置(默认是最后)创建指定名字的表,并且返回表对象
w_data.create_sheet('third_table', 1)

print(w_data.sheetnames)  # ['first_table', 'third_table', 'Sheet', 'Sheet1', 'second_table']

# 删除表
w_data.remove(w_data['Sheet1'])
w_data.save(filename='data/info.xlsx')

# 写入数据
w_data = openpyxl.load_workbook('data/info.xlsx')
sheet = w_data['first_table']  # 获取表

sheet['A1'] = '姓名'
sheet['B1'] = '年龄'
sheet['C1'] = '性别'

sheet['A2'] = '张三'
sheet['B2'] = 25
sheet['C2'] = '男'

w_data.save('data/info.xlsx')

运行结果:

2.2 案例分析一 :爬取数据并保存excel中

示例代码:

# 利用requests获取天行数据中疫情数据,并且将获取到的数据使用excel文件保存到表中。
import requests
import openpyxl
from openpyxl.utils import get_column_letter

# 1.获取数据
url = 'http://api.tianapi.com/txapi/ncovabroad/index?key=c9d408fefd8ed4081a9079d0d6165d43'
rep = requests.get(url)
news_list = rep.json()['newslist']

# 2.设置表头信息
headers = {'continents': ('洲', 'A'),
           'provinceName': ('国家', 'B'),
           'currentConfirmedCount': ('现有确诊', 'C'),
           'confirmedCount': ('累计确诊', 'D'),
           'curedCount': ('治愈', 'E'),
           'deadCount': ('死亡', 'F')}

# 3.创建工作表
wb = openpyxl.Workbook()
sheet = wb.active

# 4.写入数据
# 先写入第一行的表头
column_num = 1
for key in headers:
    column = get_column_letter(column_num)
    location = f'{column}1'
    sheet[location] = headers[key][0]
    column_num += 1

# 再从第二行开始写入爬取到的数据
row = 2
for news in news_list:  # 遍历每条数据项,一个数据项对应一个字典
    for key in news:  # 遍历数据键值
        if key in headers:  # 保证键是表头中的某一项我们需要的数据
            location = f'{headers[key][1]}{row}'  # 存在表中的位置
            value = news[key]  # 需要的数据
            sheet[location] = value  # 写入
    row += 1

wb.save(filename='data/epidemic.xlsx')

运行结果:

2.3 案例分析二: 操作单元格中内容样式并保存数据

示例代码:

import openpyxl
from openpyxl.styles import Font, PatternFill, Border, Side, Alignment  # 字体、填充图案、边框、侧边、对齐方式

# 1.打开工作簿
data = openpyxl.load_workbook('data/体检表.xlsx')
sheet = data.active

# 2.设置单元格字体样式
"""
Font(
    name=None,      # 字体名,可以用字体名字的字符串
    strike=None,    # 删除线,True/False
    color=None,     # 文字颜色
    size=None,      # 字号
    bold=None,      # 加粗, True/False
    italic=None,    # 倾斜,Tue/False
    underline=None  # 下划线, 'single', 'singleAccounting', 'double','doubleAccounting'
)
"""
# 创建字体对象,并调整合适的参数
font1 = Font(
    name='微软雅黑',
    size=15,
    italic=False,
    color='ff0000',
    bold=False,
    strike=False,
    underline='single',
)

# 设置指定单元格的字体
# 单元格对象.font = 字体对象
area = sheet['A1':'E1']
for row in area:
    for _ in row:
        _.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'
                    #              '深色网格“,”深色网格“,”深色水平“,”深色灰色“,”浅色向下“,”浅灰色“,”纯色“,”浅色网格“,”灰色125“,”浅色水平“,”浅色网格“,”深色向下“,”中灰色“,”灰色0625“,”深色向上“,”深色垂直“,”浅色垂直“,”浅色向上“
	start_color=None# 设置填充颜色
)
"""

# 设置填充对象
fill = PatternFill(fill_type='solid', start_color='FFC0CB')

# 设置单元格的填充样式
# 单元格对象.fill = 填充对象
area = sheet['A1':'E1']
for row in area:
    for _ in row:
        _.fill = fill  # 调整填充格式

# 4. 设置单元格对齐样式
# 创建对象
al = Alignment(
    horizontal='right',  # 水平方向:center, left, right
    vertical='top',  # 垂直方向: center, top, bottom
)
# 设置单元格的对齐方式
sheet['B2'].alignment = al

# 5. 设置边框样式
# 设置边对象(四个边的边可以是一样的也可以不同,如果不同就创建对个Side对象)
# border_style取值('dashDot','dashDotDot', 'dashed','dotted','double','hair', 'medium', 'mediumDashDot', 'mediumDashDotDot','mediumDashed', 'slantDashDot', 'thick', 'thin')
#                  单点划线,双点划线,点划线,双划线,头发,中划线,单点中划线,双点中划线,中划线,斜划线,粗划线,细划线
side = Side(border_style='thin', color='000000')

# 设置边框对象
# left、right、top、bottom表示的是边框的四个边,四个边可以使用一个边对象
bd = Border(left=side, right=side, top=side, bottom=side)
# 设置单元格的边框
area = sheet['A1':'E1']
for row in area:
    for _ in row:
        _.border = bd

# 6.设置单元格的宽度和高度
# 设置列宽
sheet.column_dimensions['A'].width = 10
# 设置行高
sheet.row_dimensions[1].height = 30

# 7. 保存
data.save(filename='data/体检表2.xlsx')

运行结果:

2.4 案例分析三:将列表数据写入excel中

示例代码:

import openpyxl
import datetime

datas = [
    ('学号', '姓名', '年龄', '专业', '考试时间'),
    ('B00001', '张1', 18, '语文', datetime.datetime(2019, 6, 18, 0, 0)),
    ('B00002', '张2', 19, '数学', datetime.datetime(2019, 6, 19, 0, 0)),
    ('B00003', '张3', 20, '英语', datetime.datetime(2019, 6, 20, 0, 0)),
    ('B00004', '张4', 21, '物理', datetime.datetime(2019, 6, 21, 0, 0)),
    ('B00005', '张5', 22, '化学', datetime.datetime(2019, 6, 22, 0, 0)),
    ('B00006', '张6', 23, '生物', datetime.datetime(2019, 6, 23, 0, 0)),
    ('B00007', '张7', 24, '历史', datetime.datetime(2019, 6, 24, 0, 0))
]

# 创建空的Workbook对象
w_data = openpyxl.Workbook()

# 获取活动表
sheet = w_data.active

for i in range(1, len(datas) + 1):
    for j in range(1, 6):
        sheet.cell(row=i, column=j, value=datas[i - 1][j - 1])

w_data.save('data/info.xlsx')

运行结果:

到此这篇关于python中openpyxl库用法详解的文章就介绍到这了,更多相关python openpyxl库内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Python利用openpyxl库遍历Sheet的实例

    方法一,利用 sheet.iter_rows() 获取 Sheet1 表中的所有行,然后遍历 import openpyxl wb = openpyxl.load_workbook('example.xlsx') sheet = wb.get_sheet_by_name('Sheet1') for row in sheet.iter_rows(): for cell in row: print(cell.coordinate, cell.value) print('--- END OF ROW

  • python3结合openpyxl库实现excel操作的实例代码

    一.相关说明: 1.openpyxl(可读写excel表)专门处理Excel2007及以上版本产生的xlsx文件:2007一下的版本为xls结尾的文件,需要使用 xlrd和xlwt库进行操作 2.excel表的文字编码如果是"gb2312" 读取后就会显示乱码,请先转成Unicode 3.workbook: 工作簿,一个excel文件包含多个sheet. 4.sheet:工作表,一个workbook有多个,表名识别,如"sheet1","sheet2&qu

  • Python Excel处理库openpyxl使用详解

    openpyxl是一个第三方库,可以处理xlsx格式的Excel文件.pip install openpyxl安装. 读取Excel文件 需要导入相关函数 from openpyxl import load_workbook # 默认可读写,若有需要可以指定write_only和read_only为True wb = load_workbook('pythontab.xlsx') 默认打开的文件为可读写,若有需要可以指定参数read_only为True. 获取工作表--Sheet # 获得所有s

  • python使用openpyxl库读写Excel表格的方法(增删改查操作)

    一.前言 嗨,大家好,我是新发. 最近需要做个小工具,可以通过python来读写Excel,实现增删改查操作.以前用的是xlrd和xlwt这两个python库,今天我要讲的是openpyxl库,我觉得openpyxl比xlrd和xlwt更强大更好用,话不多说,开始吧. 二.安装openpyxl 可以直接通过命令行安装 pip install openpyxl 如果你是内网环境,则可以先在外网下载openpyxl库然后转到内网再安装. openpyxl下载地址:https://pypi.org/p

  • Python Excel处理库openpyxl详解

    Python中的penpyxl是一个第三方库,可以处理xlsx格式的Excel文件.pip install openpyxl安装. penpyxl读取Excel文件 需要导入相关函数 from openpyxl import load_workbook # 默认可读写,若有需要可以指定write_only和read_only为True wb = load_workbook('pythontab.xlsx') 默认打开的文件为可读写,若有需要可以指定参数read_only为True. penpyx

  • python使用openpyxl库修改excel表格数据方法

    1.openpyxl库可以读写xlsx格式的文件,对于xls旧格式的文件只能用xlrd读,xlwt写来完成了. 简单封装类: from openpyxl import load_workbook from openpyxl import Workbook from openpyxl.chart import BarChart, Series, Reference, BarChart3D from openpyxl.styles import Color, Font, Alignment from

  • python中openpyxl库用法详解

    目录 一.读取数据 1.1 从工作簿中取得工作表 1.2 从表中取得单元格 1.3 从表中取得行和列 二.写入数据 2.1 创建Workbook对象来创建Excel文件并保存 2.2 案例分析一 :爬取数据并保存excel中 2.3 案例分析二: 操作单元格中内容样式并保存数据 2.4 案例分析三:将列表数据写入excel中 openpyxl模块是一个读写Excel 文档的Python库,openpyxl是一个比较综合的工具,能够同时读取和修改Excel文档. openpyxl.load_wor

  • Python中itertools的用法详解

    iterator 循环器(iterator)是对象的容器,包含有多个对象.通过调用循环器的next()方法 (next()方法,在Python 3.x中),循环器将依次返回一个对象.直到所有的对象遍历穷尽,循环器将举出StopIteration错误. 在for i in iterator结构中,循环器每次返回的对象将赋予给i,直到循环结束.使用iter()内置函数,我们可以将诸如表.字典等容器变为循环器.比如 for i in iter([2, 4, 5, 6]): print i 标准库中的i

  • 对Python中的@classmethod用法详解

    在Python面向对象编程中的类构建中,有时候会遇到@classmethod的用法. 总感觉有这种特殊性说明的用法都是高级用法,在我这个层级的水平中一般是用不到的. 不过还是好奇去查了一下. 大致可以理解为:使用了@classmethod修饰的方法是类专属的,而且是可以通过类名进行调用的.为了能够展示其与一般方法的差异,写一段简单的代码如下: class DemoClass: @classmethod def classPrint(self): print("class method"

  • python中yield的用法详解——最简单,最清晰的解释

    首先我要吐槽一下,看程序的过程中遇见了yield这个关键字,然后百度的时候,发现没有一个能简单的让我懂的,讲起来真TM的都是头头是道,什么参数,什么传递的,还口口声声说自己的教程是最简单的,最浅显易懂的,我就想问没有有考虑过读者的感受. 接下来是正题: 首先,如果你还没有对yield有个初步分认识,那么你先把yield看做"return",这个是直观的,它首先是个return,普通的return是什么意思,就是在程序中返回某个值,返回之后程序就不再往下运行了.看做return之后再把它

  • python中yield的用法详解

    首先我要吐槽一下,看程序的过程中遇见了yield这个关键字,然后百度的时候,发现没有一个能简单的让我懂的,讲起来真TM的都是头头是道,什么参数,什么传递的,还口口声声说自己的教程是最简单的,最浅显易懂的,我就想问没有有考虑过读者的感受. 接下来是正题: 首先,如果你还没有对yield有个初步分认识,那么你先把yield看做"return",这个是直观的,它首先是个return,普通的return是什么意思,就是在程序中返回某个值,返回之后程序就不再往下运行了.看做return之后再把它

  • python中time库使用详解

    目录 time库的使用: 时间获取: (1)time函数 (2)localtime()函数和gmtime()函数 (3)ctime()函数(与asctime()函数为一对互补函数) 时间格式化: (1)strftime()函数(将时间格式输出为字符串,与strptime函数互补).strftime(格式,时间 )主要决定时间的输出格式 (2)strptime()函数,strptime(字符串,格式),主要将该格式的字符串输出为struct_time. 程序计时: 总结 time库的使用: Pyt

  • Python中re.findall()用法详解

    在python中,通过内嵌集成re模块,程序媛们可以直接调用来实现正则匹配.本文重点给大家介绍python中正则表达式 re.findall 用法 re.findall():函数返回包含所有匹配项的列表.返回string中所有与pattern相匹配的全部字串,返回形式为数组. 示例代码1:[打印所有的匹配项] import re s = "Long live the people's Republic of China" ret = re.findall('h', s) print(r

  • Python中itertools模块用法详解

    本文实例讲述了Python中itertools模块用法,分享给大家供大家参考.具体分析如下: 一般来说,itertools模块包含创建有效迭代器的函数,可以用各种方式对数据进行循环操作,此模块中的所有函数返回的迭代器都可以与for循环语句以及其他包含迭代器(如生成器和生成器表达式)的函数联合使用. chain(iter1, iter2, ..., iterN): 给出一组迭代器(iter1, iter2, ..., iterN),此函数创建一个新迭代器来将所有的迭代器链接起来,返回的迭代器从it

  • python中sort()函数用法详解

    目录 1.函数sort()是对列表就地排序 2.函数sort()修改序列,不返回任何值 3.sorted()函数会返回一个排序列表,不改变原有序列 4.函数sort()是升序排序,如何降序排序,需要用到函数reverse() 5.函数sort()排序的高级用法 (1) key参数 (2) reverse参数 补充:python中sort的用法——对列表中的元素按关键字排序 总结 1.函数sort()是对列表就地排序 >>> x=[8,9,0,7,4,5,1,2,3,6] >>

  • python中getopt()函数用法详解

    目录 一.函数用法 二.示例 通过getopt模块中的getopt( )方法,我们可以获取和解析命令行传入的参数 一.函数用法 getopt(args, shortopts, longopts=[ ]) args:固定写法sys.argv[1:] shortopts:短参 字符串类型,限制命令行可传入的短参名称(命令行可不传参,如果传参,必须是指定的参数名,否则会报错) 参数名必须为单字符,前面使用单短横线(-) 命令行写法: -a 不带参数值形式 -b test_b 带参数值形式(中间空格可省

随机推荐