使用 openpyxl 处理 Excel 电子表格
openpyxl
模块让 Python 程序能读取和修改 Excel 电子表格文件。例如,可能有一个无聊的任务,需要从一个电子表格拷贝一些数据,粘贴到另一个电子表格中。或者可能需要从几千行中挑选几行,根据某种条件稍作修改。或者需要查看几百份部门预算电子表格,寻找其中的赤字。正是这种无聊无脑的电子表格任务,可以通过 Python 来完成。
首先,让我们来看一些基本定义。一个 Excel 电子表格文档称为一个工作簿。一个工作簿保存在扩展名为.xlsx 的文件中。每个工作簿可以包含多个表(也称为工作表)。Python 编程快速上手——让繁琐工作自动化用户当前查看的表(或关闭 Excel 前最后查看的表),称为活动表。每个表都有一些列(地址是从 A 开始的字母)和一些行(地址是从 1 开始的数字)。在特定行和列的方格称为单元格。每个单元格都包含一个数字或文本值。单元格形成的网格和数据构成了表。
与Excel文件的基本定义类似,openpyxl
中也包含了与之对应的3个对象:
Workbook: 工作簿,一个Excel文件即一个Workbook。
Worksheet: 工作表,一个Workbook可以包含多个Worksheet,不同的Worksheet有不同的名字。
Cell: 单元格,存储数据的对象。
1 工作簿(Workbook)
新建工作簿:
import openpyxl
wb = openpyxl.Workbook()
新建工作薄的可选关键字:
write_only:bool # 默认为False,仅支持写入Excel文件,无法读取
打开原有工作簿:
workbook_path = "./data.xlsx"
wb = openpyxl.load_workbook(workbook_path)
打开工作簿的可选关键字:
data_only:bool # 默认为False,将各个单元格的公式转为数据
read_only:bool # 默认为False,只读方式打开Excel文件,读取速度较快
保存工作簿:
wb.save(workbook_path) # 注意,会覆盖原有文件
关闭工作簿,关闭打开的工作薄,只对用read-only
和write-only
方式打开的工作薄有效:
wb.close()
2 工作表(Worksheet)
打开当前工作表:
ws = wb.active # 打开当前工作表,即打开Excel文件时显示的那个工作表
打开指定工作表:
ws = wb["Sheet_name"] # 或wb.get_sheet_by_name("Sheet_name")
获取当前所有工作表名:
sheet_names = wb.sheetnames
修改工作表名:
ws.title = "new_name"
新建工作表:
ws = wb.create_sheet("new_sheet_name")
删除工作表:
wb.remove("sheet_name")
复制工作表,该函数不能在工作簿之间复制工作表,只能在其所属的工作簿中进行复制:
wb.copy_worksheet(from_worksheet)
3 单元格(Cell)
3.1 行和列
获取行列数:
max_row = ws.max_row # 获取行数,即有数据的所有行中最大的那一行
max_col = ws.max_column # 获取列数,即有数据的所有列中最大的那一列
min_row = ws.min_row
min_col = ws.min_col
获取指定行和列:
row = ws[2] # 获取第二行的所有单元格,从第ws.min_col列到第ws.max_col列
col = ws['C'] # 获取第三列的所有单元格,从第ws.min_row行到第ws.max_col行
遍历所有行和列:
rows = ws.rows # 返回所有行的迭代器
cols = ws.columns # 返回所有列的迭代器
# 逐行逐列遍历所有单元格
for row in rows:for cell in row:print(f"{cell.coordinate} {cell.value}", end=' ')print('\n')
# 逐列逐行遍历所有单元格
for coll in cols:for cell in col:print(f"{cell.coordinate} {cell.value}", end=' ')print('\n')
列字母和数字之间的转换:
from openpyxl.utils import get_column_letter, column_index_from_string
get_column_letter(27) # "AA"
column_index_from_string("AA") # 27
插入行和列:
ws.insert_rows(idx, amount=1) # 在第idx行前插入amount行
ws.insert_cols(idx, amount=1) # 在第idx列前插入amount列
删除行和列:
ws.delete_rows(idx, amount=1) # 从第idx行开始删除amount行
ws.delete_cols(idx, amount=1) # 从第idx列开始删除amount列
3.2 选中单元格
单个单元格:
cell = ws["C2"] # 或cell = ws.cell(2, 3)
cell.row # 查看单元格所在行
cell.column # 查看单元格所在列,返回int
cell.value # 查看单元格值
指定范围的单元格:
# 以下三种方式遍历的单元格范围相同
cells = ws["A1:D3"]
cells = ws.iter_rows(min_row=1, max_row=3, min_col=1, max_col=4)
cells = ws.iter_cols(min_col=1, max_col=4, min_row=1, max_row=3)
3.3 单元格操作
向单个单元格填充数据:
ws["A1"] = 1 # A1单元格数据设为1
ws.cell(2, 1) = 2 # A2单元格数据设为2
cell = ws["A3"]
cell = "=SUM(A1:A2)" # A3单元格插入公式计算A1、A2单元格的和
cell.value # 返回"=SUM(A1:A2)"# 以data_only=True的方式打开该Excel文件
cell.value # 返回3
写入一行或多行数据:
data = ["Tom", 18, "北京"]
ws.append(data) # 会接在已有数据后追加写入datas = [["Tom", 18, "北京"],["Jack", 20, "上海"]]for data in datas:ws.append(data)
移动范围数据:
# "B3:D5"区域的单元格上移两行,左移一列
ws.move_range("B3:D5", rows=-2, cols=-1)
"""
Signature: ws.move_range(cell_range, rows=0, cols=0, translate=False)
Docstring:
Move a cell range by the number of rows and/or columns:
down if rows > 0 and up if rows < 0
right if cols > 0 and left if cols < 0
Existing cells will be overwritten.
Formulae and references will not be updated."""
合并和拆分单元格:
ws.merge_cells("A1:B2")
ws.unmerge_cells("A1:B2")
冻结窗格:
ws.freeze_panes = "A2" # 冻结第一行
freeze_panes 的设置
|
冻结的行和列 |
---|---|
ws.freeze_panes = 'A2'
|
行1 |
ws.freeze_panes = 'B1'
|
列A |
ws.freeze_panes = 'C1'
|
列 A 和列 B |
ws.freeze_panes = 'C2'
|
行 1 和列 A 和列 B |
ws.freeze_panes = 'A1' 或ws.freeze_panes = None
|
没有冻结窗格 |
4 Excel样式调整
4.1 字体样式
Font(name:str, size:int, bold:bool, italic:bool, color:str)
name: 字体名
size: 字体大小
bold: 是否加粗
italic: 是否斜体
color: 字体颜色
from openpyxl.styles import Fontfont = Font(name='Times New Roman', size=10, bold=False, italic=True, color="000000")
ws["A1"].font = font
4.2 设置对齐样式
Alignment(horizontal:str, vertical:str, text_ritation:int, wrap_text:bool)
水平对齐:
distributed
,justify
,center
,left
,fill
,centerContinuous
,right
,general
垂直对齐:bottom
,distributed
,justify
,center
,top
from openpyxl.styles import Alignmentalignment = Alignment(horizontal="center", vertical="bottom",text_rotation=30, wrap_text=True)
ws["A1"].alignment = alignment
4.3 设置边框
边框样式设置:Side(style=None, color=None, border_style=None)
可选边框样式:
double
,mediumDashDotDot
,slantDashDot
,dashDotDot
,dotted
,hair
,mediumDashed
,dashed
,dashDot
,thin
,mediumDashDot
,medium
,thick
边框位置设置:Border(left=None, right=None, top=None, bottom=None, diagonal=None, diagonal_direction=None, vertical=None, horizontal=None, diagonalUp=False, diagonalDown=False, outline=True, start=None, end=None,)
from openpyxl.styles import Side, Borderside = Side(style="thin", color="000000")
border = Border(left=side, right=side, top=side, bottom=side)
ws["A1"].border = border
4.4 设置单元格填充样式
PatternFill(patternType=None, fgColor='000000', bgColor='000000', fill_type=None, start_color=None, end_color=None)
其中,fgColor
或start_color
表示前景色,或起始颜色;bgColor
或end_color
表示背景色,或结束颜色;fill_type
为填充样式,一般有如下几种:
'lightGrid', 'gray0625', 'lightTrellis', 'lightDown', 'lightVertical', 'darkTrellis', 'darkHorizontal', 'darkVertical', 'darkGrid', 'darkGray', 'solid', 'darkUp', 'lightGray', 'mediumGray', 'darkDown', 'lightHorizontal', 'lightUp', 'gray125'
from openpyxl.styles import PatternFill, GradientFillpattern_fill = PatternFill(fill_type="solid", fgcolor="000000")
ws["A1"].fill = pattern_fill
4.5 设置行高和列宽
ws.row_dimensions[1].height = 50
ws.column_dimensions['C'].width = 20
学习更多Python & GIS的相关知识,请移步公众号GeodataAnalysis
:
使用 openpyxl 处理 Excel 电子表格相关推荐
- 使用 openpyxl 在 Excel 电子表格中自动执行日常任务
花费数小时处理 Excel 中平凡的重复性任务.使用 Python 和 openpyxl 探索自动化. 像许多从事各种业务职能的人一样,我几乎每天都使用 Excel 来制作图表和分析.然而,其中一些图 ...
- Python模块学习 - openpyxl - 处理 Excel 电子表格
目录 一.openpyxl介绍 二.安装openpyxl 三.openpyxl基本用法
- npoi生成的表格数字左上角_如何用openpyxl自动化编写Excel电子表格 进阶篇 下
自动化Excel进阶技能之一:添加图片 尽管Excel电子表格中并不经常都是插入图片的,但是添加了图片以及图片里插入里url链接,这还是相当实用的.我们可以用它来做品牌宣传,或者让Excel表格更加个 ...
- asp.net添加删除表格_如何用openpyxl自动化编写Excel电子表格
有很多不同的东西你可以写到电子表格,从简单的文本或数字值到复杂的公式,图表,甚至图像. 创建一个简单的电子表格 之前,大家看到了一个非常快速的例子,就是如何将 "Hello world!&q ...
- python3遍历电子表格_用openpyxl遍历excel表格
Python的openpyxl模块,提供了对excel表格的读写操作接口.本文介绍使用openpyxl来遍历excel表格. openpyxl支持Excel 2010 xlsx/xlsm/xltx/x ...
- python输出字体的大小_Toby的Python笔记 | 预备知识:安装openpyxl学做电子表格
Toby的Python笔记 | 预备知识:安装openpyxl学做电子表格 Python 需要创建和读取excel表里面的数据,需要用 openpyxl 这个包,今天安装好备用. 首先,进入C命令窗口 ...
- 处理Excel电子表格
一个Excel电子表格文档称为一个工作薄. 每个工作薄可以包含多个工作表. 用户当前查看的表,称为活动表. python没有自带openpyxl,所以必须安装. 1 2 3 4 5 6 7 8 9 1 ...
- python怎么打开excel文件并处理_Python利用openpyxl处理Excel文件(Excel文件基本操作)...
上一篇,我们简要介绍了openpyxl及其安装过程,这一篇我们学习使用openpyxl处理Excel的具体过程,力争涵盖大多数官方文档中相关内容,对这一知识点进行简单的汇总. 一.学习目标 (一)op ...
- python利用公式计算_Python利用openpyxl处理Excel文件(公式实例)
前面我们学习了Python使用openpyxl模块处理Excel文件的大部分内容,今天,我们通过一个例子来学习Python使用Excel公式的方法,引出今天的主题利用openpyxl处理Excel公式 ...
最新文章
- css小技巧 -- 单标签实现单行文字居中,多行文字居左
- 二叉树(BST)之创建二叉搜索树
- 全国大学生电子设计大赛 赛前准备
- asp连接mysql字符串_asp连接数据库字符串
- WebSocket服务器TransactionID_SiteDetailMap的析构工作
- jQuery基础:remove()与 detach()区别
- 光纤收发器的原理及应用_光纤收发器的应用与讲解
- 三维视觉基础之世界坐标系、相机坐标系、图像坐标系和像素坐标系之间的转换关系
- [渝粤教育] 中国地质大学 运筹学1 复习题
- 驻波比,功率计原理,短波机驻波测量
- python爬虫遇到动态加密怎么办?爬取某点评网站内容
- 数字图像处理笔记(九)基本的形态学算法
- 高校医科能转专业去计算机工科,转专业详细(2017最新版)想
- 前端实现AWS s3亚马逊云储存上传资源
- 《灰故事》:他用曲笔描绘着我们
- 织梦Dedecms主要文件夹目录及模板文件说明
- 达人评测 r7 7730u和i7 12700h差距 锐龙r77730u和酷睿i712700h对比
- 作为网络推广从业人员每天的工作内容和日程
- 在外网访问内网电脑远程桌面的几种方式
- 高准艾默生质量流量计的故障原因和解决方案