当前位置: 首页 > news >正文

【Excel自动化办公】使用openpyxl对Excel进行读写操作

目录

一、环境安装

1.1 创建python项目

1.2 安装openpyxl依赖

二、Excel数据读取操作

三、Excel数据写入操作

3.1 创建空白工作簿

3.2 写数据

四、设置单元格样式

4.1 字体样式

4.2 设置单元格背景填充色

4.3 设置单元格边框样式

4.4 单元格对齐方式

4.5 数据筛选

全部筛选

设置筛选条件

排序

五、公式操作

5.1 设置公式

5.2 读取公式结果

六、设置行高列宽

七、单元格合并与拆分

7.1 合并

7.2 拆分

八、冻结窗口

8.1 冻结

8.2 解冻

九、绘制图表


一、环境安装

python处理Excel的方式:openpyxl

1.1 创建python项目

指定虚拟环境为python3.9版本...

1.2 安装openpyxl依赖

pip install openpyxl==3.0.7

二、Excel数据读取操作

我们先准备一个名为test.xlsx的表格。

import openpyxl# 创建一个工作簿对象
wb = openpyxl.load_workbook('./test.xlsx')# 获取工作簿的sheet表的名称
sheet_list = wb.sheetnames
print(sheet_list) # ['作家列表', '学生列表']sheet = wb['作家列表']# 获取活动表
print(wb.active) # <Worksheet "学生列表">cell = sheet['A3']
print(cell.value) # 余华
print(cell.row) # 3
print(cell.column) # 1
print(cell.coordinate) # A3# 获取第1行第2列的值
cell = sheet.cell(row=1, column=2).value
print(cell) # 书籍# 进行切片操作,从而取得电子表格中一行、一列或一个矩形区域中所有Cell对象
for cell_row in sheet['A1':'B4']:for cell in cell_row:print(cell.coordinate, cell.value)# 要访问特定行或列的单元格的值,也可以使用Worksheet对象的rows和columns属性
for cell in list(sheet.columns)[0]: # 获取第一列的cellprint(cell.value)# 获取工作表中行数和列数
print(sheet.max_row) # 4
print(sheet.max_column) # 2

三、Excel数据写入操作

3.1 创建空白工作簿

import openpyxl# 创建一个新的工作簿对象
wb = openpyxl.Workbook()
# 给工作簿设置名称
sheet = wb.active
sheet.title = '跟进记录表'# 保存工作表
wb.save('./第一个工作簿.xlsx')

3.2 写数据

import openpyxl# 创建一个新的工作簿对象
wb = openpyxl.load_workbook('./第一个工作簿.xlsx')
# 创建sheet
wb.create_sheet(title='销售记录')
wb.create_sheet(index=1, title='养殖技术')print(wb.sheetnames) # ['跟进记录表', '养殖技术', '销售记录']# 删除sheet页
del wb['养殖技术']
print(wb.sheetnames) # ['跟进记录表', '销售记录']sheet = wb['销售记录']
sheet['A1'] = 'hello'
sheet['B2'] = 'world'
wb.save('./第一个工作簿.xlsx')

四、设置单元格样式

4.1 字体样式

from openpyxl.styles import Font
import openpyxlwb = openpyxl.Workbook()
sheet = wb.active
sheet['A3'] = '字体'
sheet['A3'].font = Font(name='楷体', color='8470FF')
wb.save('./styles.xlsx')

Font()的参数有很多,比如:

  • italic=True:设置斜体
  • size=xxx:设置字体大小
  • underline='sigle':单下划线
  • b=True:加粗
  • ....

4.2 设置单元格背景填充色

from openpyxl.styles import Font, PatternFill
import openpyxlwb = openpyxl.Workbook()
sheet = wb.active
sheet['A3'] = '背景填充色'
sheet['A3'].fill = PatternFill(patternType='solid', fgColor='8470FF')
wb.save('./styles.xlsx')

4.3 设置单元格边框样式

from openpyxl.styles import Side, Border
import openpyxlwb = openpyxl.Workbook()
sheet = wb.active
sheet['F4'] = '效果1'
sheet['F5'] = '效果2'
s1 = Side(style='thin', color='8470FF')
s2 = Side(style='double', color='ff0000')
# 只作用上边框
sheet['F4'].border = Border(top=s1)
sheet['F5'].border = Border(top=s2, bottom=s1, left=s2, right=s1)
wb.save('./styles.xlsx')

4.4 单元格对齐方式

from openpyxl.styles import Alignment
import openpyxlwb = openpyxl.load_workbook('./cellBorder.xlsx')
sheet = wb['Sheet1']
# horizontal代表水平对齐  vertical代表垂直对齐
c1 = sheet['C1'].alignment = Alignment(horizontal='right', vertical='center') # 水平靠右对齐 垂直居中对齐
c2 = sheet['C2'].alignment = Alignment(vertical='center')
c3 = sheet['C3'].alignment = Alignment(vertical='top')
wb.save('./cellBorder.xlsx')

4.5 数据筛选

全部筛选

import openpyxlwb = openpyxl.load_workbook('./筛选器.xlsx')
sheet = wb['Sheet1']
# 创建筛选器对象:auto_filter
# ref:使得筛选器对象引用指定的区域
sheet.auto_filter.ref = 'A1:D7'
wb.save('./筛选器.xlsx')

设置筛选条件

import openpyxlwb = openpyxl.load_workbook('./筛选器.xlsx')
sheet = wb['Sheet1']
# 创建筛选器对象:auto_filter
# ref:使得筛选器对象引用指定的区域
sheet.auto_filter.ref = 'A1:D7'
# add_filter_column参数:参数1表示对指定区域哪一列进行设置筛选条件,参数2:筛选条件内容
sheet.auto_filter.add_filter_column(1, ['北京', '深圳'])
wb.save('./筛选器.xlsx')

排序

import openpyxlwb = openpyxl.load_workbook('./筛选器.xlsx')
sheet = wb['Sheet1']
# 创建筛选器对象:auto_filter
# ref:使得筛选器对象引用指定的区域
sheet.auto_filter.ref = 'A1:D7'
# 参数1:排序列  参数2:升降序 True为降序 false为升序
sheet.auto_filter.add_sort_condition(ref='D2:D7', descending=True)
wb.save('./筛选器.xlsx')

五、公式操作

5.1 设置公式

import openpyxlwb = openpyxl.Workbook()
sheet = wb.active
sheet['A1'] = 200
sheet['A2'] = 300
sheet['A3'] = '=SUM(A1:A2)'wb.save('./sum.xlsx')

5.2 读取公式结果

import openpyxlwb = openpyxl.load_workbook('./sum.xlsx')
sheet = wb.active
print(sheet['A3'].value) # =SUM(A1:A2)

这个结果居然是读取到了公式字符串,但我们想要的是公式计算的结果,也就是A3的结果,如何解决呢?

import openpyxlwb = openpyxl.load_workbook('./sum.xlsx', read_only=True)
sheet = wb.active
# 注意:如果返回的是None,则打开Excel工作簿,将内容手动保存下即可,不方便但是没办法
print(sheet['A3'].value)

六、设置行高列宽

设置行高和列宽:Worksheet对象有 row_dimensions column_dimensions属性,控制行高和列宽。

import openpyxlwb = openpyxl.Workbook()
sheet = wb.active
# 设置行高
sheet.row_dimensions[2].height = 50
# 设置列宽
sheet.column_dimensions['A'].width = 80wb.save('./hw.xlsx')

七、单元格合并与拆分

7.1 合并

import openpyxlwb = openpyxl.Workbook()
sheet = wb.active
# 合并
sheet.merge_cells('A1:D7')
sheet['A1'] = 'Python'
wb.save('./merge.xlsx')

7.2 拆分

import openpyxlwb = openpyxl.load_workbook('./merge.xlsx')
sheet = wb.active
# 拆分
sheet.unmerge_cells('A1:D7')
wb.save('./merge.xlsx')

八、冻结窗口

8.1 冻结

import openpyxlwb = openpyxl.load_workbook('./produceSales.xlsx')
sheet = wb.active
# 冻结首行标题
sheet.freeze_panes = 'A2'
wb.save('./produceSales.xlsx')

8.2 解冻

import openpyxlwb = openpyxl.load_workbook('./produceSales.xlsx')
sheet = wb.active
# 冻结首行标题
sheet.freeze_panes = None
wb.save('./produceSales.xlsx')

九、绘制图表

openpyxl支持利用工作表中单元格的数据,创建条形图、折线图、散点图和饼图。要创建图表,需要做下列事情:

  • 创建一个Reference对象,表示作用在图表中的数据区域
  • 创建图表对象
  • 往图表对象中添加数据
  • 将图表添加到指定sheet中

import openpyxlwb = openpyxl.load_workbook('./echarts.xlsx')
sheet = wb.active# 1. 创建一个Reference对象,表示作用在图表中的数据区域
values = openpyxl.chart.Reference(sheet, min_row=1, min_col=1, max_row=10, max_col=5)# 2. 创建图表对象
chart = openpyxl.chart.BarChart()# 3. 往图表对象中添加数据
chart.add_data(values)# 4. 将图表添加到指定sheet中
sheet.add_chart(chart, 'G1')
wb.save('./echarts.xlsx')

相关文章:

【Excel自动化办公】使用openpyxl对Excel进行读写操作

目录 一、环境安装 1.1 创建python项目 1.2 安装openpyxl依赖 二、Excel数据读取操作 三、Excel数据写入操作 3.1 创建空白工作簿 3.2 写数据 四、设置单元格样式 4.1 字体样式 4.2 设置单元格背景填充色 4.3 设置单元格边框样式 4.4 单元格对齐方式 4.5 数据筛选…...

大龄女程序员脱单指南:如何科学评估你的Mr. Right?(含C语言代码示例)

大龄女程序员脱单指南&#xff1a;如何科学评估你的Mr. Right&#xff1f; 在这个快节奏、高压力的时代&#xff0c;女程序员们时常在代码的世界里游走&#xff0c;却可能在现实的情感世界里感到迷茫。尤其是对于那些步入“大龄”行列的女程序员来说&#xff0c;脱单似乎成了一…...

深入剖析Java并发库(JUC)之StampedLock的应用与原理

码到三十五 &#xff1a; 个人主页 心中有诗画&#xff0c;指尖舞代码&#xff0c;目光览世界&#xff0c;步履越千山&#xff0c;人间尽值得 ! 在现代多核处理器架构下&#xff0c;并发编程成为提升程序性能的关键手段。Java作为一门广泛使用的编程语言&#xff0c;提供了丰…...

【PMP】每日一练2

项目生命周期与开发生命周期 项目生命周期开发生命周期 项目生命周期 项目生命周期&#xff1a;描述项目从开始到结束所经历的一系列阶段。 项目生命周期类型&#xff1a; 预测型&#xff1a;也称瀑布型生命周期。在生命周期的早期阶段就确定了项目的范围、时间、成本。客户需…...

2024年投影仪显示技术怎么选?哪个好?优缺点详解,买前必看

日前&#xff0c;华为海思LCoS激光投影技术引发了众多关注&#xff0c;该技术的面世&#xff0c;或将在投影行业掀起新的浪潮&#xff01;众所周知&#xff0c;目前主流的显示技术主要是DLP、3LCD和1LCD几种。那么&#xff0c;这几种技术之间到底有什么区别&#xff1f;下面就带…...

Git Bash命令初始化本地仓库,提交到远程仓库

git init&#xff1a;初始化空仓库 // 初始化一个空仓库或者重新初始化一个存在的仓库 git init git remote // 为当前本地仓库添加一个远程仓库地址 git remote add origin https://gitee.com/xxx/demo.git git pull // 从设置好链接的远程仓库拉去已经存在的数据&#xff0c;…...

Docker 学习笔记一

一、什么是docker Docker 是一个基于轻量级虚拟化技术的容器&#xff0c;整个项目基于Go语言开发&#xff1b;Docker是一个C/S架构&#xff0c;后端众多模块各司其职&#xff0c;docker的daemon是运行在主机上通过client可以进行通信。 docker 由三部分组成&#xff1a;镜像(…...

Git一点通

1.Git的优势 Git是一个伟大的版本管理工具&#xff0c;比之svn&#xff0c;具有以下优势&#xff1a; 分布式版本控制&#xff1a;Git是一种分布式版本控制系统&#xff0c;每个开发者都拥有自己的完整代码库&#xff0c;不需要依赖网络连接就可以进行版本控制、合并和提交操作…...

商标转让有哪些好处 商标转让条件 商标转让流程

商标转让是企业之间转让商标权益的一种交易方式。它在商业运作中扮演着重要的角色&#xff0c;对于企业的发展和战略布局都有一定的影响。 商标转让的好处&#xff1a; 1、商标价值变现&#xff1a;企业在商标注册过程中投入了大量的时间和精力&#xff0c;通过转让可以将商标…...

诺视科技完成亿元Pre-A2轮融资,加速Micro-LED微显示芯片商业化落地

近日&#xff0c;Micro-LED微显示芯片研发商诺视科技&#xff08;苏州&#xff09;有限公司&#xff08;以下简称“诺视科技”&#xff09;宣布完成亿元Pre-A2轮融资&#xff0c;本轮融资由力合资本领投&#xff0c;老股东盛景嘉成、汕韩基金以及九合创投持续加码&#xff0c;这…...

Unity定时播放音乐

一、需求 需要定时在早上8:50&#xff0c;中午12:00&#xff0c;下午13:10定时播放音乐 二、实现步骤 依次在unity创建背景图、主文字提示、时间文字提示、音量控制器及音量文字提示、退出按钮、播放按钮&#xff0c;暂停按钮 在Canvas下创建一个Script脚本&#xff1a;获取…...

如何做接口测试?

今天来聊聊接口测试&#xff0c;现在是2024年了&#xff0c;打开招聘网站随便点开一个招聘帖子&#xff0c;几乎都可以看到岗位JD要求写着有接口测试经验优先。其重要性可见一斑&#xff01; 目前&#xff0c;凡是好一点稍具规模的公司哪怕是大厂外包也几乎都要求会接口测试&a…...

U盘打不开提示格式化怎么办,U盘提示格式化数据恢复

U盘打不开提示格式化怎么办?在使用U盘的过程中,有时候我们可能会遇到U盘打不开的情况,并且提示需要格式化才能继续使用。这种情况下,我们应该如何处理呢?U盘承载着无数重要的数据,里面存放着是大家多年辛勤努力的结晶,这些文件见证很多东西。突然打不开,并提示格式化,…...

LeetCode - 存在重复元素

219. 存在重复元素 II 这道题可以用两个方法解决。 哈希表 从左到右遍历数组&#xff0c;并将数组的下标存到hash中&#xff0c;在遍历数字的过程中&#xff0c;如果hash中不存在nums[i]&#xff0c;将nums[i]加入到hash当中&#xff0c;若存在&#xff0c;则判断下标之间的关…...

RUST egui体验

egui官方提供了web版的demo&#xff0c;效果还是很不错的&#xff0c;就是用的时候有点一头雾水&#xff0c;没有找到明确的指导怎么把这些组件插入到自己的application或者web。花了一天时间撸了一遍流程&#xff0c;记录一下&#xff0c;说不定以后能用到呢 >_< efram…...

详解llamaindex

什么是LlamaIndex LlamaIndex是一个用于LLM应用程序的数据框架&#xff0c;用于注入、结构化&#xff0c;并访问私有或特定领域的数据。 入门教程 简单使用 # Linux export OPENAI_API_KEYxxxwindows set OPENAI_API_KEYxxx# 代码中加入 API_SECRET_KEY "xxx" B…...

管理类联考–复试–英文面试–问题--规划介绍原因做法--汇总

文章目录 规划介绍原因做法 规划 一、提问方式&#xff1a;问题1&#xff1a;读研的规划&#xff1b;问题2&#xff1a;未来五年的规划&#xff1b;问题3&#xff1a;是否计划读博 常见问法1&#xff1a;Can you talk about your plans in the postgraduate period&#xff1f…...

成都百洲文化传媒有限公司电商新浪潮的领航者

在当今电商行业风起云涌的时代&#xff0c;成都百洲文化传媒有限公司以其独特的视角和专业的服务&#xff0c;成为了众多商家争相合作的伙伴。今天&#xff0c;就让我们一起走进百洲文化的世界&#xff0c;探索其背后的成功密码。 一、百洲文化的崛起之路 成都百洲文化传媒有限…...

【Unity】获取游戏对象或组件的常用方法

前言 在Unity开发过程中&#xff0c;我们经常需要获取组件&#xff0c;那么在Unity里如何获取组件呢&#xff1f; 一、获取游戏对象 1.GameObject.Find GameObject.Find 是通过物体的名称获取对象的 所以会遍历当前整个场景&#xff0c;效率较低 而且只能获取激活状态的物体…...

html5cssjs代码 024 响应式布局示例

html5&css&js代码 024 响应式布局示例 一、代码二、解释 该HTML代码重点在于构建一个带有响应式设计的两栏布局网页&#xff0c;包含页头、导航条、主要内容区&#xff08;左右两列&#xff09;和底部区域&#xff0c;并运用CSS样式设置页面元素的布局、颜色、字体、间…...

Unity UGUI轻量UI框架:200行代码实现零GC界面管理

1. 为什么还要自己手写UI框架&#xff1f;——当UGUI原生方案开始“卡脖子”很多人看到这个标题第一反应是&#xff1a;“都2024年了&#xff0c;还手写UI框架&#xff1f;Asset Store里几十个成熟方案&#xff0c;NGUI、FairyGUI、TextMeshPro配套的UI系统一抓一大把&#xff…...

Claude本地化部署终极方案(企业级容器化全栈手册):支持Anthropic API兼容、流式响应、模型热切换与RBAC权限隔离

更多请点击&#xff1a; https://codechina.net 第一章&#xff1a;Claude本地化部署的架构全景与企业级价值定位 Claude本地化部署并非简单地将模型权重下载后运行&#xff0c;而是一套融合推理引擎优化、安全沙箱隔离、API网关治理与可观测性集成的端到端架构体系。其核心目…...

电子商务设计师软考备战:特别篇 - 综合模拟与备考策略

1. 考试形式与内容结构1.1 考试基本信息考试科目与时间基础知识考试&#xff1a;上午9:00-11:30&#xff08;150分钟&#xff09;应用技术考试&#xff1a;下午2:00-4:30&#xff08;150分钟&#xff09;题型与分值分布上午考试&#xff08;基础知识&#xff09;&#xff1a; -…...

股票买卖最佳时机:LeetCode121题解

题目LeetCode121给定一个数组 prices &#xff0c;它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。你只能选择 某一天 买入这只股票&#xff0c;并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。返回你可以从这笔交易中获取…...

Godot4 2D游戏开发避坑指南:TileMap绘制、节点顺序与相机设置的三个常见问题

Godot4 2D游戏开发避坑指南&#xff1a;TileMap绘制、节点顺序与相机设置的三个常见问题当你第一次用Godot4完成一个2D场景搭建时&#xff0c;那种成就感往往会被几个突如其来的bug瞬间击碎——角色神秘消失、背景纹丝不动、屏幕边缘出现诡异黑边。这些问题看似简单&#xff0c…...

在Hermes Agent项目中接入Taotoken作为自定义模型供应商

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 在Hermes Agent项目中接入Taotoken作为自定义模型供应商 基础教程类&#xff0c;针对使用Hermes Agent框架的开发者&#xff0c;详…...

基于雷达与光敏传感器的低功耗智能窗防设备设计与实现

1. 项目概述&#xff1a;一个基于雷达与光敏的智能窗防设备几年前&#xff0c;我因为一次短暂的出差&#xff0c;家里空置了几天&#xff0c;回来后就一直琢磨着怎么给家里的窗户加点“动静”。市面上的智能安防摄像头固然好&#xff0c;但要么需要复杂的布线&#xff0c;要么云…...

通过curl命令快速测试Taotoken大模型API的连通性与返回格式

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 通过curl命令快速测试Taotoken大模型API的连通性与返回格式 在集成大模型能力到应用时&#xff0c;开发者通常需要一种快速、轻量的…...

简单学习 --> SSE

我们使用AI时&#xff0c;AI对我们说的话不会一次性把全部内容弹出来&#xff0c;而是会像流水一样&#xff0c;一点点吐出来&#xff0c;那么这种丝滑的交互体验&#xff0c;背后的核心就是 SSE (Server-Sent Events)。 什么是 SSE&#xff1f; SSE&#xff08;Server-Sent …...

NHSE终极教程:5分钟掌握动物森友会存档编辑技巧

NHSE终极教程&#xff1a;5分钟掌握动物森友会存档编辑技巧 【免费下载链接】NHSE Animal Crossing: New Horizons save editor 项目地址: https://gitcode.com/gh_mirrors/nh/NHSE 还在为《集合啦&#xff01;动物森友会》的收集烦恼吗&#xff1f;想快速打造梦想岛屿却…...