【python自动化办公】Python自动化之Excel——openpyxl 模块(入门)

2023-11-05

前言

1. 学习python自动化办公目的

  • 学会使用python自动化处理文件,减少重复劳动
  • 科学管理文件
  • 能够不再使用别的软件合并、分割PDF等

2. 未来持续打卡内容

  • Task03 Python与word和PDF
  • Task04 简单的Python爬虫
  • Task05 Python操作钉钉自动化
  • Task06 其它推荐软件和网页

3. 资料来源与思维导图

本文不详细介绍函数,简单介绍方法,函数可自行百度,也可看课程GitHub链接:https://github.com/datawhalechina/office-automation
openpyxl文档:https://openpyxl.readthedocs.io/en/stable/index.html
Excel 自动化之 OpenPyXL

一、openpyxl简介

OpenPyXL 是读写 Excel 2010 xlsx/xlsm/xltx/xltm 的 Python 库,简单易用,功能广泛,单元格格式/图片/表格/公式/筛选/批注/文件保护等等功能应有尽有,图表功能是其一大亮点。优点:

  • 几乎可以实现所有的 Excel 功能
  • 接口清晰,文档丰富,学习成本相对较低

2. openpyxl对象介绍

Worksheets
Cell1
Cell2
......
Worksheet1
Worksheet2
......
Workbook
  • Workbook 工作簿
    • Workbook.get_sheet_by_name 方法,通过指定 sheetname 的方式来获取读取的工作簿中指定的 sheet(工作表) 对象
    • 提过索引的方式获取读取的工作簿中指定的 sheet(工作表) 对象,如wb['Sheet3']
  • Worksheet工作表
    • Worksheet.title获取 sheet 名称
    • Worksheet.dimensions 获取 sheet 中值的范围。
  • Cell 单元格
    • Cell 对象有一个 value 属性,包含这个单元格中保存的值。
    • Cell 对象也有 row 、column 和 coordinate 属性,提供该单元格的位置信息。
    • Excel 用字母指定列,在Z列之后,列开始使用两个字母:AA、AB等,所以在调用的 cell() 方法时,可传入整数作为 row 和 column 关键字参数,也可以得到一个单元格。

二、创建表格,写入数据

# 1) 导入 openpyxl 中的 Workbook 类
from openpyxl import Workbook
import os

root_path = os.os.getcwd()

# 2) 初始化一个 Workbook 对象
wb = Workbook()
print(f'默认sheet:{wb.sheetnames}')

# 3) 通过 Workbook 对象的 create_sheet 函数创建一个 sheet
# title sheet 名称
# index sheet 位置,默认从0开始
sheet = wb.create_sheet(title='mysheet', index=0)
print(f'添加后sheet:{wb.sheetnames}')

# 4) 在新建的 sheet 中写入数据
# 比如 在 A1 单元格中写入 'this is test'
sheet['A1'].value = 'this is test'

print(f"sheet['A1'].value = {sheet['A1'].value}")

# 保存
wb.save(root_path+'creat_sheet_test.xlsx')

几个注释:

  • 创建Workbook时会自动创建一个worksheet,可以通过Workbook.active获得
  • sheet创建后如果不传递名字,会自动命名,(Sheet, Sheet1, Sheet2, …),可以通过Worksheet.title改变

三 、与Pandas 和 NumPy

openpyxl 支持与Pandas 和 NumPy共同工作

支持numpy

OpenPyXl对Numpy类型浮点,整数和布尔值具有内置支持。使用Pandas的时间戳类型可以支持DateTimes。

Working with Pandas Dataframes

openpyxl.utils.dataframe.dataframe_to_rows()函数提供了简单的与Pandas Dataframes共同工作的方法:

from openpyxl.utils.dataframe import 
from openpyxl import Workbook
dataframe_to_rows
wb = Workbook()
ws = wb.active

#创建一个df
df = pd.DataFrame({
    'money':np.random.randint(45, 50, size = [1, 20])[0],
},
    index=pd.date_range('2021-02-01', '2021-02-20'),  # 行索引和时间相关
)
df.index.name = '消费日期'  # 设置索引名字

#将df写入ws中
for r in dataframe_to_rows(df, index=True, header=True):
    ws.append(r)
    
#将数据框架转换为工作表,突出显示标题和索引:
for cell in ws['A'] + ws[1]:
    cell.style = 'Pandas'

wb.save(root_path+'creat_sheet_df.xlsx')

四、绘图

from openpyxl import Workbook
from openpyxl.chart import BarChart, Reference

wb = Workbook()
ws = wb.active

rows = [
    ('月份', '苹果', '香蕉'),
    (1, 43, 25),
    (2, 10, 30),
    (3, 40, 60),
    (4, 50, 70),
    (5, 20, 10),
    (6, 10, 40),
    (7, 50, 30),
]

for row in rows:
    ws.append(row)

chart1 = BarChart()
chart1.type = "col"
chart1.style = 10
chart1.title = "销量柱状图"
chart1.y_axis.title = '销量'
chart1.x_axis.title = '月份'

data = Reference(ws, min_col=2, min_row=1, max_row=8, max_col=3)
series = Reference(ws, min_col=1, min_row=2, max_row=8)
chart1.add_data(data, titles_from_data=True)
chart1.set_categories(series)
ws.add_chart(chart1, "A10")

绘图
绘图步骤
使用柱状图类 BarChart 和 数据应用类 Reference

  • 创建 Workbook,并为活动 Sheet 添加数据
  • 创建柱状图对象,设置图表属性,type 为 col 为列状图,bar 为水平图
  • 创建数据引用对象,指定从那个 sheet 以及数据范围
  • 创建系列数据引用对象
  • 将数据和系列加入到图表对象中
  • 最后将图表对象用 add_chart 添加到 sheet 里
    许多图标设计
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【python自动化办公】Python自动化之Excel——openpyxl 模块(入门) 的相关文章

  • 使用 pythonbrew 编译 Python 3.2 和 2.7 时出现问题

    我正在尝试使用构建多个版本的 python蟒蛇酿造 http pypi python org pypi pythonbrew 0 7 3 但我遇到了一些测试失败 这是在运行的虚拟机上 Ubuntu 8 04 32 位 当我使用时会发生这种情
  • 在 python 程序中合并第三方库的最佳实践是什么?

    下午好 我正在为我的工作编写一个中小型Python程序 该任务需要我使用 Excel 库xlwt and xlrd 以及一个用于查询 Oracle 数据库的库 称为CX Oracle 我正在通过版本控制系统 即CVS 开发该项目 我想知道围
  • Django 管理员在模型编辑时间歇性返回 404

    我们使用 Django Admin 来维护导出到我们的一些站点的一些数据 有时 当单击标准更改列表视图来获取模型编辑表单而不是路由到正确的页面时 我们会得到 Django 404 页面 模板 它是偶尔发生的 我们可以通过重新加载三次来重现它
  • SQLAlchemy 通过关联对象声明式多对多自连接

    我有一个用户表和一个朋友表 它将用户映射到其他用户 因为每个用户可以有很多朋友 这个关系显然是对称的 如果用户A是用户B的朋友 那么用户B也是用户A的朋友 我只存储这个关系一次 除了两个用户 ID 之外 Friends 表还有其他字段 因此
  • Python(Selenium):如何通过登录重定向/组织登录登录网站

    我不是专业程序员 所以请原谅任何愚蠢的错误 我正在做一些研究 我正在尝试使用 Selenium 登录数据库来搜索大约 1000 个术语 我有两个问题 1 重定向到组织登录页面后如何使用 Selenium 登录 2 如何检索数据库 在我解决
  • Django:按钮链接

    我是一名 Django 新手用户 尝试创建一个按钮 单击该按钮会链接到我网站中的另一个页面 我尝试了一些不同的例子 但似乎没有一个对我有用 举个例子 为什么这不起作用
  • 如何在 Python 中检索 for 循环中的剩余项目?

    我有一个简单的 for 循环迭代项目列表 在某些时候 我知道它会破裂 我该如何退回剩余的物品 for i in a b c d e f g try some func i except return remaining items if s
  • PyUSB 1.0:NotImplementedError:此平台不支持或未实现操作

    我刚刚开始使用 pyusb 基本上我正在玩示例代码here https github com walac pyusb blob master docs tutorial rst 我使用的是 Windows 7 64 位 并从以下地址下载 z
  • OpenCV 无法从 MacBook Pro iSight 捕获

    几天后 我无法再从 opencv 应用程序内部打开我的 iSight 相机 cap cv2 VideoCapture 0 返回 并且cap isOpened 回报true 然而 cap grab 刚刚返回false 有任何想法吗 示例代码
  • 如何加速Python中的N维区间树?

    考虑以下问题 给定一组n间隔和一组m浮点数 对于每个浮点数 确定包含该浮点数的区间子集 这个问题已经通过构建一个解决区间树 https en wikipedia org wiki Interval tree 或称为范围树或线段树 已经针对一
  • 如何在Python中获取葡萄牙语字符?

    我正在研究葡萄牙语 角色看起来很奇怪 我怎样才能解决这个问题 代码 import feedparser import random Vou definir os feeds feeds conf feedurl http pplware s
  • 添加不同形状的 numpy 数组

    我想添加两个不同形状的 numpy 数组 但不进行广播 而是将 缺失 值视为零 可能最简单的例子是 1 2 3 2 gt 3 2 3 or 1 2 3 2 1 gt 3 2 3 1 0 0 我事先不知道形状 我正在弄乱每个 np shape
  • 无法在 Python 3 中导入 cProfile

    我试图将 cProfile 模块导入 Python 3 3 0 但出现以下错误 Traceback most recent call last File
  • Fabric env.roledefs 未按预期运行

    On the 面料网站 http docs fabfile org en 1 10 usage execution html 给出这个例子 from fabric api import env env roledefs web hosts
  • 将图像分割成多个网格

    我使用下面的代码将图像分割成网格的 20 个相等的部分 import cv2 im cv2 imread apple jpg im cv2 resize im 1000 500 imgwidth im shape 0 imgheight i
  • 每个 X 具有多个 Y 值的 Python 散点图

    我正在尝试使用 Python 创建一个散点图 其中包含两个 X 类别 cat1 cat2 每个类别都有多个 Y 值 如果每个 X 值的 Y 值的数量相同 我可以使用以下代码使其工作 import numpy as np import mat
  • 解释 Python 中的数字范围

    在 Pylons Web 应用程序中 我需要获取一个字符串 例如 关于如何做到这一点有什么建议吗 我是 Python 新手 我还没有找到任何可以帮助解决此类问题的东西 该列表将是 1 2 3 45 46 48 49 50 51 77 使用
  • 使用其构造函数初始化 OrderedDict 以便保留初始数据的顺序的正确方法?

    初始化有序字典 OD 以使其保留初始数据的顺序的正确方法是什么 from collections import OrderedDict Obviously wrong because regular dict loses order d O
  • Scrapy:如何使用元在方法之间传递项目

    我是 scrapy 和 python 的新手 我试图将 parse quotes 中的项目 item author 传递给下一个解析方法 parse bio 我尝试了 request meta 和 response meta 方法 如 sc
  • 如何将输入读取为数字?

    这个问题的答案是社区努力 help privileges edit community wiki 编辑现有答案以改进这篇文章 目前不接受新的答案或互动 Why are x and y下面的代码中使用字符串而不是整数 注意 在Python 2

随机推荐

  • 安防天下5、6——视频编码器技术DVS、网络录像机(NVR)技术

    视频编码器技术DVS DVS Digital vedio server 的出现 标志着视频监控系统进入了网络时代 编码器的主要功能是编码压缩及网络传输 适合应用再监控点比较分散的应用环境中 但从本质上讲 DVS还不是纯粹的网络监控设备 因为
  • Linux常用命令大全(详细版)

    目录 1 Linux管理文件和目录的命令 2 有关磁盘空间的命令 3 文件备份和压缩命令 4 有关关机和查看系统信息的命令 5 管理使用者和设立权限的命令 6 线上查询的命令 7 文件阅读的命令 8 网络操作命令 9 其他命令 详细版本 1
  • Spring常用注解(绝对经典),全靠这份Java知识点PDF大全

    Bean public ColorFactoryBean colorFactoryBean return new ColorFactoryBean 创建一个spring定义的FactoryBean public class ColorFac
  • 原生js实现导航栏拖拽滑动(适用于pc端和手机端)

    先贴一张动图看看效果吧 下面把代码贴上注释都在代码边上
  • 【PyTorch】torch.utils.data.Dataset 介绍与实战

    文章目录 一 前言 二 torch utils data Dataset 是什么 1 干什么用的 2 长什么样子 三 通过继承 torch utils data Dataset 定义自己的数据集类 四 为什么要定义自己的数据集类 五 实战
  • 什么是多态?如何实现?只看这一篇就够了

    1 多态的概念 1 1 概念 多态的概念 通俗来说 就是多种形态 具体点就是去完成某个行为 当不同的对象去完成时会产生出不同的状态 2 多态的定义及实现 2 1多态的构成条件 多态是在不同继承关系的类对象 去调用同一函数 产生了不同的行为
  • 在任务管理器结束某些任务后电脑突然白屏

    1 问题描述 任务管理器 可以通过单击右键电脑底部任务栏找到 快捷键 ctrl shfit esc 一般我们可以在 任务管理器 中强制结束一些任务 尤其是电脑特别卡的时候 但是 有时候一不留神 不知道结束了什么任务 电脑突然就白屏了 2 解
  • 【算法与数据结构】530、LeetCode二叉搜索树的最小绝对差

    文章目录 一 题目 二 解法 三 完整代码 所有的LeetCode题解索引 可以看这篇文章 算法和数据结构 LeetCode题解 一 题目 二 解法 思路分析 二叉搜索树的性质是左子树的所有节点键值小于中间节点键值 右子树的所有节点键值大于
  • C语言快速入门(2)

    目录 1 常量 1 1字面常量 1 2const修饰的常变量 1 3 define定义的标识符常量 1 4枚举常量 2 字符串和转义字符 2 1字符串 2 2转义字符 3 注释 4 选择语句 5 循环语句 6 函数 7 数组 7 1数组的定
  • css实现单行,多行文本超出文本显示省略号

    1 单行文本 div width 100px 必须要设置 overflow hidden 超出部分隐藏 white space nowrap 禁止换行 强制文本在一行显示 text overflow ellipsis 溢出文本显示省略号 使
  • to load JavaHL Library解决方法

    解决方法 Window Preferences Team SVN 在SVN接口的下拉框可以看到 默认选择的是JavaHL JNI Not Available 手动更改为SVNKit Pure Java SVNKit v1 3 5 7406
  • msys2安装与配置: 在windows上使用linux工具链g++和包管理工具pacman C++开发

    文章目录 为什么用这个msys2 下载 doc 安装 很简单 初次运行 做些配置 更新 软件安装与卸载方法 安装必要的软件包 设置win环境变量 在windows terminal中使用 在vscode中使用 为什么用这个msys2 方便w
  • OSPF详解及简单配置

    动态路由协议 直连路由器之间构建邻居关系 通过收发各类数据包进行共享信息 来获取未知的路由信息 基于某种算法自动生成未知网段最优路径的解 将其加载在路由表中 判断一个网络协议的好坏 通常关注三方面 收敛速度快 占用资源少 选路佳 各类协议的
  • Aspose最新版22.8教程

    直接上代码 用vs开发工具写一段代码 word转pdf new Document this txtWordFile Text Save new pdf new PdfSaveOptions 编译 生成exe 打开dnspy 将生成的exe和
  • 王姓名字大全

    土 王 士 王 健 王雯新 王美玲 王 振 王诗雅 王博岩 王 一 王德丹 王竣臣 王资存 王 一 王宇陈 王 颖 王淑华 王骏臣 王阳菲 王孜臣 王 三 王 婷 王 樱 王 莉 王鹏哲 王玺毓 王新华 王 任 王之惠 王韬涵 王添乐 王孝
  • 超详细前端面试八股文

    今天在掘金看到一篇特别好的前端八股文 链接 连八股文都不懂还指望在前端混下去么 掘金
  • Vue结合路由配置递归实现菜单栏

    转载 https www cnblogs com HouJiao p 13139901 html 完整代码在码云 https gitee com zhuxueling router menu git 在日常开发中 项目中的菜单栏都是已经实现
  • java与数据库连接odbc_详解java数据库连接之JDBC-ODBC桥连方式

    java数据库连接方式有两种 其中JDBC ODBC桥连方式属于之一 JDBC ODBC桥连方式连接数据库适用于JDK1 8之前的JDK版本 具体的连接过程详见下文 详析JDBC ODBC桥连方式 JDK提供JDBC接口 JDBC是一种可以
  • CMake基本语法

    操作数 类型 分类 BOOL STRING PATH FILEPATH 配置变量类型 LIST 转换 推导 具名 声明周期 set 声明 具名 unset取消 定义一个变量 判断是否定义用DEFINED set lt 变量名 gt lt 变
  • 【python自动化办公】Python自动化之Excel——openpyxl 模块(入门)

    前言 1 学习python自动化办公目的 学会使用python自动化处理文件 减少重复劳动 科学管理文件 能够不再使用别的软件合并 分割PDF等 2 未来持续打卡内容 Task03 Python与word和PDF Task04 简单的Pyt