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-onlywrite-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)

其中,fgColorstart_color表示前景色,或起始颜色;bgColorend_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 电子表格相关推荐

  1. 使用 openpyxl 在 Excel 电子表格中自动执行日常任务

    花费数小时处理 Excel 中平凡的重复性任务.使用 Python 和 openpyxl 探索自动化. 像许多从事各种业务职能的人一样,我几乎每天都使用 Excel 来制作图表和分析.然而,其中一些图 ...

  2. Python模块学习 - openpyxl - 处理 Excel 电子表格

    目录 一.openpyxl介绍 二.安装openpyxl 三.openpyxl基本用法

  3. npoi生成的表格数字左上角_如何用openpyxl自动化编写Excel电子表格 进阶篇 下

    自动化Excel进阶技能之一:添加图片 尽管Excel电子表格中并不经常都是插入图片的,但是添加了图片以及图片里插入里url链接,这还是相当实用的.我们可以用它来做品牌宣传,或者让Excel表格更加个 ...

  4. asp.net添加删除表格_如何用openpyxl自动化编写Excel电子表格

    有很多不同的东西你可以写到电子表格,从简单的文本或数字值到复杂的公式,图表,甚至图像. 创建一个简单的电子表格 之前,大家看到了一个非常快速的例子,就是如何将 "Hello world!&q ...

  5. python3遍历电子表格_用openpyxl遍历excel表格

    Python的openpyxl模块,提供了对excel表格的读写操作接口.本文介绍使用openpyxl来遍历excel表格. openpyxl支持Excel 2010 xlsx/xlsm/xltx/x ...

  6. python输出字体的大小_Toby的Python笔记 | 预备知识:安装openpyxl学做电子表格

    Toby的Python笔记 | 预备知识:安装openpyxl学做电子表格 Python 需要创建和读取excel表里面的数据,需要用 openpyxl 这个包,今天安装好备用. 首先,进入C命令窗口 ...

  7. 处理Excel电子表格

    一个Excel电子表格文档称为一个工作薄. 每个工作薄可以包含多个工作表. 用户当前查看的表,称为活动表. python没有自带openpyxl,所以必须安装. 1 2 3 4 5 6 7 8 9 1 ...

  8. python怎么打开excel文件并处理_Python利用openpyxl处理Excel文件(Excel文件基本操作)...

    上一篇,我们简要介绍了openpyxl及其安装过程,这一篇我们学习使用openpyxl处理Excel的具体过程,力争涵盖大多数官方文档中相关内容,对这一知识点进行简单的汇总. 一.学习目标 (一)op ...

  9. python利用公式计算_Python利用openpyxl处理Excel文件(公式实例)

    前面我们学习了Python使用openpyxl模块处理Excel文件的大部分内容,今天,我们通过一个例子来学习Python使用Excel公式的方法,引出今天的主题利用openpyxl处理Excel公式 ...

最新文章

  1. css小技巧 -- 单标签实现单行文字居中,多行文字居左
  2. 二叉树(BST)之创建二叉搜索树
  3. 全国大学生电子设计大赛 赛前准备
  4. asp连接mysql字符串_asp连接数据库字符串
  5. WebSocket服务器TransactionID_SiteDetailMap的析构工作
  6. jQuery基础:remove()与 detach()区别
  7. 光纤收发器的原理及应用_光纤收发器的应用与讲解
  8. 三维视觉基础之世界坐标系、相机坐标系、图像坐标系和像素坐标系之间的转换关系
  9. [渝粤教育] 中国地质大学 运筹学1 复习题
  10. 驻波比,功率计原理,短波机驻波测量
  11. python爬虫遇到动态加密怎么办?爬取某点评网站内容
  12. 数字图像处理笔记(九)基本的形态学算法
  13. 高校医科能转专业去计算机工科,转专业详细(2017最新版)想
  14. 前端实现AWS s3亚马逊云储存上传资源
  15. 《灰故事》:他用曲笔描绘着我们
  16. 织梦Dedecms主要文件夹目录及模板文件说明
  17. 达人评测 r7 7730u和i7 12700h差距 锐龙r77730u和酷睿i712700h对比
  18. 作为网络推广从业人员每天的工作内容和日程
  19. 在外网访问内网电脑远程桌面的几种方式
  20. 高准艾默生质量流量计的故障原因和解决方案

热门文章

  1. powerdesigner画UML组件图初步
  2. Camstar客制化开发做查询操作(Designer中存放SQL语句)
  3. 【转】C++之父B. Stroustrup近期言论
  4. vue中引入js,然后new js里的方法
  5. 在 Keras 模型中使用预训练的词嵌入
  6. 设计的意义是解决问题
  7. r语言结构方程模型可视化_R语言实现拟合神经网络预测和结果可视化
  8. 河南计算机专业考公要求,2017河南公务员专业需求类别(专业分类)
  9. 新手必读:三层交换技术基础知识详解
  10. Outlook Express常见问答