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

Openpyxl--学习记录

1.工作表的基本操作

1.1 工作表的新建打开与保存

1.1.1 创建工作簿

from openpyxl import Workbook
from pathlib import Pathfile_path = Path.home() / "Desktop" / "123.xlsx"# 1.创建工作簿
wb = Workbook()
# 2.访问默认工作簿
ws = wb.active
# 3.填充内容
ws["A4"] = 100
ws.cell(row=4, column=2, value=10)
# 4.保存工作簿
wb.save(file_path)

1.1.2 打开已经存在的工作表

一个工作表至少有一个工作簿. 你可以通过 Workbook.active 来获取这个属性

# 加载工作表
wb = load_workbook(file_path)
# 打开默认激活的工作表
ws = wb.active
# print(ws) => Worksheet "2yue">
# 打开指定的工作表
ws2 = wb["1yue"] 
# print(ws2) => <Worksheet "1yue">

1.2 工作表的创建,删除与复制

1.2.1 删除工作表

# 1.加载工作簿
wb = load_workbook(file_path)
# 2.显示所有表名,列表形式
sheets = wb.sheetnames
# print(sheets) => ['1yue', '2yue']
# 3.显示所有工作表的名字
sheets_names = [i.title for i in wb.worksheets]
# print(sheets_names) => ['1yue', '2yue']
# 4.删除工作表对象
wb.remove(wb["1yue"])
# 5.保存工作簿
wb.save(file_path)

1.2.2 创建新的工作表

# 1.加载工作簿
wb = load_workbook(file_path)
# 2.创建新的工作簿
wb.create_sheet("3yue")
# 3.保存工作簿
wb.save(file_path)

1.2.3 复制工作表

# 1.加载工作表
wb = load_workbook(file_path)
# 2.复制工作表
copy_sheet = wb.copy_worksheet(wb["2yue"])
# 3.保存工作表
wb.save(file_path)

1.2.4 练习

# 1.批量创建工作表100张
wb = Workbook(file_path)
for i in range(1, 10):month = 7 + int(i / 30)day = i % 30wb.create_sheet(f"{month}月{day}日")
wb.save(file_path)# 2.批量修改工作表名
wb = load_workbook(file_path)
for i in wb.worksheets:i.title = "beijing" + "-" + i.title
wb["beijing-7月1日"].title = "shanghai-7月1日"
wb.save(file_path)# 3.除了包含上海的表,其它全部删除
wb = load_workbook(file_path)
for i in wb.worksheets:if "shanghai" in i.title:continuewb.remove(i)
wb.save(file_path)

2.单元格基本操作

2.1 获取单元格的值

from pathlib import Path
from openpyxl import load_workbookfile_path = Path.home() / "Desktop/123.xlsx"wb = load_workbook(file_path)
ws = wb.active
print(ws["A4"].value)
print(ws.cell(row=4,column=1).value)

2.2 获取一个区域的单元格

  • 先遍历行,再遍历单元格对象 
  • 按列遍历,就是先遍历完一列,再遍历下一列
  • list只能对整张表就行操作,但是不能对区域进行操作,但是我们可以对于list进行切片
  • 可以通过iter_rows来指定行列获取区域单元格
  • 可以通过rows(按行获取单元格对象),columns(按列获取单元格对象)
  • 列名的数字和字母之间的转换

1)行遍历,可以使用 ws["A1:C8"]和 ws["1:8"],获取的都是行单元格对象

for rows in ws["A1:C8"]:print(rows)
for rows in ws["1:8"]:print(rows)

2)列遍历,可以使用 ws["A:C"],获取的是列单元格对象 

for columns in ws["A:C"]:print(columns)

 3)list操作工作表

for rows in list(ws):print(rows)

 行切片

for rows in list(ws)[1:3]:print(rows)

4)iter_rows获取指定行列的单元格数据 ,也是获取行单元格数据

for rows in ws.iter_rows(min_row=1, max_row=10, min_col=1, max_col=3):print(rows)

5)rows获取行单元格数据,columns获取列单元格数据 

for rows in ws.rows:print(rows)

for columns in ws.columns:print(columns)

6)数字和字母的转化,utils.get_column_letter(10),utils.column_index_from_string("J")

# 列名,通过数字获取字母
letter = utils.get_column_letter(10)
# print(letter) => J
# 列名,通过字母获取数字
num = utils.column_index_from_string("J")
# print(num) => 10

7)获取区域单元格的内容 

from pathlib import Path
from openpyxl import load_workbook,utilsfile_path = Path.home() / "Desktop/123.xlsx"wb = load_workbook(file_path)
ws = wb.active
for rows in ws.iter_rows(min_row=1, max_row=8,min_col=1, max_col=3):for cell in rows:print(cell.value)

 

2.3 动态读取数据

  • 获取最大行和最大列 ws.max_row, max_column
  • 获取单元格的行和列 ws["A1"].row, ws["A1"].column
  • 获取一行或是一列值 [i.value for i in ws[1]], [i.value for i in ws["1"]]
from pathlib import Path
from openpyxl import load_workbookfile_path = Path().home() / "Desktop" / "test.xlsx"wb = load_workbook(file_path)ws = wb.active# 最大行和最大列
max_row = ws.max_row
max_column = ws.max_column
# print(max_row, max_column) => 5 4# 获取单元格的行和列
cell_row = ws["A1"].row
cell_column = ws["A1"].column
# print(cell_row,cell_column) => 1 1# 获取一行或是一列的值
rows_value = [i.value for i in ws[1]]
columns_value = [i.value for i in ws["1"]]
# print(rows_value,columns_value) => ['1行1列', '2行1列', '3行1列', '4行1列'] ['1行1列', '2行1列', '3行1列', '4行1列']

2.4 行列的插入与删除 

# 在第二行插入,插入4行
ws.insert_rows(idx=2,amount=4)
# 在第二列插入,插入3列
ws.insert_cols(idx=2,amount=3)
# 在第二行删除,删除12行
ws.delete_rows(idx=2,amount=12)
# 在第二列删除,删除6列
ws.delete_cols(idx=2,amount=6)

2.5 移动与冻结单元格

  • 移动单元格内容使用 ws.move_range(cell_range=f"{start_cell}:{end_cell}",rows=10,cols=5)
  • 冻结单元格 ws.freeze_panes = "A2"
from pathlib import Path
from openpyxl import load_workbook, utilsfile_path = Path().home() / "Desktop" / "test.xlsx"
save_file_path = Path().home() / "Desktop" / "test2.xlsx"
wb = load_workbook(file_path)ws = wb.active# 获取有数据的单元格
cell_list = [cell for rows in ws.iter_rows() for cell in rows if cell.value is not None]# 获取数据区域范围
row_start = cell_list[0].row
column_start = utils.get_column_letter(cell_list[0].column)
start_cell = column_start + str(row_start)row_end = cell_list[-1].row
column_end = utils.get_column_letter(cell_list[-1].column)
end_cell = column_end + str(row_end)
# # 移动表里面所有的内容向下10行,向右5列
ws.move_range(cell_range=f"{start_cell}:{end_cell}",rows=-10,cols=-5)
wb.save(save_file_path)

2.6 合并单元格

  • 合并单元格,ws.merge_cells("A1:A10")
  • 取消合并的单元格, ws.unmerge_cells("A1:A10")

3. 单元格样式操作

 3.1 设置单元格行高

设置第一行数据的行高

ws.row_dimensions 是一个字典,键是行号(整数),值是 RowDimension 对象。这些对象包含关于行的尺寸和高度等信息。

workbook = openpyxl.load_workbook(sheet_name)
sheet = workbook.active
sheet.row_dimensions[1].height = 26

3.2 设置单元格数据列宽自适应

ws.column_dimensions 是一个字典,其键是列标签(如 'A', 'B', 'C' 等),值是 ColumnDimension 对象。这些对象包含关于列的宽度和其他可能的属性(如是否隐藏)的信息

根据字母来获取获取宽度,将字符宽度+1

sheet.column_dimensions[get_column_letter(cell.column)].width = len(cell.value) + 1
ws = wb.activefor cell in list(ws.rows)[0]:print(len(cell.value))ws.column_dimensions[utils.get_column_letter(cell.column)].width = len(cell.value) + 3

 3.3 填充单元格颜色

cell.fill = PatternFill(start_color="8DB4E2", end_color="8DB4E2", fill_type="solid")

3.4 设置字体样式,大小,并加粗显示

 cell.font = Font(name="Times New Roman", size=12, bold=True)

3.5 设置字体居中显示

cell.alignment = Alignment(horizontal='center', vertical='center')

3.6 设置合并单元格

sheet.merge_cells("L3:M7")

3.7 设置多个单元格填充相同的样式

fill_green = PatternFill(start_color="008000", end_color="008000", fill_type="solid")
fill_green_cells = ["R3", "S3", "R6", "S6"]
for cell in fill_green_cells:ws[cell].fill = fill_green

4.实践 

设置首行格式,并设定内容的判定条件

 def set_judgement(self, sheet_name: str) -> None:"""set header style and set judgement"""workbook = openpyxl.load_workbook(sheet_name)ws = workbook.active# Adjust title stylews.row_dimensions[1].height = 26for cell in ws[1]:ws.column_dimensions[get_column_letter(cell.column)].width = len(cell.value) + 1cell.fill = PatternFill(start_color="8DB4E2", end_color="8DB4E2", fill_type="solid")cell.font = Font(name="Times New Roman", size=12, bold=True)cell.alignment = Alignment(horizontal='center', vertical='center')# set judgement##省略判定内容fill_green = PatternFill(start_color="008000", end_color="008000", fill_type="solid")fill_yellow = PatternFill(start_color="FFFF00", end_color="FFFF00", fill_type="solid")fill_red = PatternFill(start_color="FF0000", end_color="FF0000", fill_type="solid")font_blue = Font(name="Times New Roman", size=10, color="5569FA", bold=True)fill_green_cells = ["R3", "S3", "R6", "S6"]fill_red_cells = ["R4", "S4", "R8", "S8", "R10", "S10"]fill_yellow_cells = ["R7", "S7"]font_blue_cells = ["L3", "T3", "T4", "L6", "T6", "T7", "T8", "L10"]for cell in font_blue_cells:ws[cell].font = font_bluefor cell in fill_green_cells:ws[cell].fill = fill_greenfor cell in fill_red_cells:ws[cell].fill = fill_redfor cell in fill_yellow_cells:ws[cell].fill = fill_yellowworkbook.save(sheet_name)

相关文章:

Openpyxl--学习记录

1.工作表的基本操作 1.1 工作表的新建打开与保存 1.1.1 创建工作簿 from openpyxl import Workbook from pathlib import Pathfile_path Path.home() / "Desktop" / "123.xlsx"# 1.创建工作簿 wb Workbook() # 2.访问默认工作簿 ws wb.active # 3.填充…...

高边坡稳定安全监测预警系统解决方案

一、项目背景 高边坡的滑坡和崩塌是一种常见的自然地质灾害&#xff0c;一但发生而没有提前预告将给人民的生命财产和社会危害产生严重影响。对高边坡可能产生的灾害提前预警、必将有利于决策者采取应对措施、减少和降低灾害造成的损失。现有的高边坡监测技术有人工巡查和利用测…...

计算机毕业设计 | vue+springboot借书管理 图书馆管理系统(附源码)

1&#xff0c;项目背景 1.1 课题背景 随着现在科学技术的进步&#xff0c;人类社会正逐渐走向信息化&#xff0c;图书馆拥有丰富的文献信息资源&#xff0c;是社会系统的重要组成部分&#xff0c;在信息社会中作用越来越重要&#xff0c;在我国图书馆计算机等 信息技术的应用…...

vue3 腾讯地图 InfoWindow 弹框

1、vue项目index.html引入地图js 2、页面使用 <script setup lang"ts"> import { useMapStore } from //store;defineOptions({ name: PageMap }); const emits defineEmits([update:area, update:address, update:latitude, update:longitude]); const prop…...

【Linux】解锁进程间通信奥秘,高效资源共享的实战技巧

管道、共享内存、消息队列、信号量 1. 进程间通信1.1. 目的1.2. 概念和本质1.3. 分类 2. 管道2.1 概念2.2. 4种情况2.3. 4种特性2.4. 匿名管道2.4.1. 原理2.4.2. 概念2.4.3. 创建 — pipe()2.4.4. 应用场景 — 进程池 2.5. 命名管道2.5.1. 概念和原理2.5.2. 创建 — mkfifo()2.…...

O1 Nano:OpenAI O1模型系列的简化开源版本

概览 O1 Nano 是一个开源项目&#xff0c;它实现了 OpenAI O1 模型系列的简化版本。O1 模型是一个高级语言模型&#xff0c;它在训练和推理过程中整合了链式思维和强化学习。这个实现版本&#xff0c;称为 O1-nano&#xff0c;专注于解决算术问题&#xff0c;以展示模型的能力。…...

浅谈人工智能之Llama3微调后使用cmmlu评估

浅谈人工智能之Llama3微调后使用cmmlu评估 引言 随着自然语言处理&#xff08;NLP&#xff09;技术的发展&#xff0c;各类语言模型如雨后春笋般涌现。其中&#xff0c;Llama3作为一个创新的深度学习模型&#xff0c;已经在多个NLP任务中展示了其强大的能力。然而&#xff0c…...

为什么需要MQ?MQ具有哪些作用?你用过哪些MQ产品?请结合过往的项目经验谈谈具体是怎么用的?

需要使用MQ的主要原因包括以下几个方面‌&#xff1a; ‌异步处理‌&#xff1a;在分布式系统中&#xff0c;使用MQ可以实现异步处理&#xff0c;提高系统的响应速度和吞吐量。例如&#xff0c;在用户注册时&#xff0c;传统的做法是串行或并行处理发送邮件和短信&#xff0c;这…...

Flutter项目打包ios, Xcode 发布报错 Module‘flutter barcode_scanner‘not found

报错图片 背景 flutter 开发的 apple app 需要发布新版本&#xff0c;但是最后一哆嗦碰到个报错&#xff0c;这个小问题卡住了我一天&#xff0c;之间的埪就不说了&#xff0c;直接说我是怎么解决的&#xff0c;满满干货 思路 这个报错 涉及到 flutter_barcode_scanner; 所…...

RWSENodeEncoder, KER_DIM_PE(lrgb文件中的encoders文件中的kernel.py)

该代码实现了一个基于核的节点编码器 KernelPENodeEncoder,用于在图神经网络中将特定的核函数编码(例如随机游走结构编码 RWSE)与节点特征相结合。通过将预先计算的核统计信息(如 RWSE 等)与原始节点特征结合,该编码器可以帮助模型捕捉图中节点的结构信息。该代码还定义了…...

技术文档:基于微信朋友圈的自动点赞工具开发

概述 该工具是一款基于 Windows 平台的自动化操作工具&#xff0c;通过模拟人工点击&#xff0c;实现微信朋友圈的自动点赞。主要适用于需频繁维护客户关系的用户群体&#xff0c;避免手动重复操作&#xff0c;提高用户的互动效率。 官方地址: aisisoft.top 一、开发背景与技术…...

kubernetes_pods资源清单及常用命令

示例&#xff1a; apiVersion: v1 kind: Pod metadata:name: nginx-podnamespace: defaultlabels:app: nginx spec:containers:- name: nginx-containerimage: nginx:1.21ports:- containerPort: 80多个容器运行示例 apiVersion: v1 kind: Pod metadata:name: linux85-nginx-…...

科目二侧方位停车全流程

科目二侧方位停车是驾考中的重要项目&#xff0c;主要评估驾驶员将车辆准确停放在道路右侧停车位的能力。以下是对科目二侧方位停车的详细解析&#xff1a; 请点击输入图片描述&#xff08;最多18字&#xff09; 一、考试要求 车辆需在库前右侧稳定停车&#xff0c;随后一次性…...

2024源鲁杯CTF网络安全技能大赛题解-Round2

排名 欢迎关注公众号【Real返璞归真】不定时更新网络安全相关技术文章&#xff1a; 公众号回复【2024源鲁杯】获取全部Writeup&#xff08;pdf版&#xff09;和附件下载地址。&#xff08;Round1-Round3&#xff09; Misc Trace 只能说题出的太恶心了&#xff0c;首先获得一…...

10.24学习

1.const 在编程中&#xff0c; const 关键字通常用来定义一个常量。常量是程序运行期间其值不能被改变的变量。使用 const 可以提高代码的可读性和可靠性&#xff0c;因为它可以防止程序中意外修改这些值。 不同编程语言中 const 的用法可能略有不同&#xff0c;以下是一…...

社交媒体与客户服务:新时代的沟通桥梁

在数字化时代&#xff0c;社交媒体已成为人们日常生活中不可或缺的一部分&#xff0c;它不仅改变了人们的沟通方式&#xff0c;也深刻影响着企业的客户服务模式。从传统的电话、邮件到如今的社交媒体平台&#xff0c;客户服务的渠道正在经历一场前所未有的变革。社交媒体以其即…...

设置虚拟机与windows间的共享文件夹

在 VMware Workstation 或 VMware Fusion 中设置共享文件夹的具体步骤如下&#xff1a; 1. 启用共享文件夹 对于 VMware Workstation 打开 VMware Workstation&#xff1a; 启动 VMware Workstation&#xff0c;找到你要设置共享文件夹的虚拟机。 设置虚拟机&#xff1a; 选…...

微信小程序性能优化 ==== 合理使用 setData 纯数据字段

目录 1. setData 的流程 2. 数据通信 3. 使用建议 3.1 data 应只包括渲染相关的数据 3.2 控制 setData 的频率 3.3 选择合适的 setData 范围 3.4 setData 应只传发生变化的数据 3.5 控制后台态页面的 setData 纯数据字段 组件数据中的纯数据字段 组件属性中的纯数据…...

【加密系统】华企盾DSC服务台提示:请升级服务器,否则可能导致客户端退回到旧服务器的版本

华企盾DSC服务台提示&#xff1a;请升级服务器&#xff0c;否则可能导致客户端退回到旧服务器的版本 产生的原因&#xff1a;控制台版本比服务器高导致控制台出现报错 解决方案 方法&#xff1a;将控制台回退到原来的使用版本&#xff0c;在控制台负载均衡查看连接该服务器各个…...

直连南非,服务全球,司库直联再进一步

yonyou 在全球化经济背景下&#xff0c;中国企业不断加快“走出去”的步伐&#xff0c;寻求更广阔的发展空间。作为非洲大陆经济最发达的国家之一&#xff0c;南非以其丰富的自然资源、完善的金融体系和多元化的市场&#xff0c;成为中国企业海外投资与合作的热门目的地。 作为…...

云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?

大家好&#xff0c;欢迎来到《云原生核心技术》系列的第七篇&#xff01; 在上一篇&#xff0c;我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在&#xff0c;我们就像一个拥有了一块崭新数字土地的农场主&#xff0c;是时…...

React第五十七节 Router中RouterProvider使用详解及注意事项

前言 在 React Router v6.4 中&#xff0c;RouterProvider 是一个核心组件&#xff0c;用于提供基于数据路由&#xff08;data routers&#xff09;的新型路由方案。 它替代了传统的 <BrowserRouter>&#xff0c;支持更强大的数据加载和操作功能&#xff08;如 loader 和…...

【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密

在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...

蓝桥杯 2024 15届国赛 A组 儿童节快乐

P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡&#xff0c;轻快的音乐在耳边持续回荡&#xff0c;小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下&#xff0c;六一来了。 今天是六一儿童节&#xff0c;小蓝老师为了让大家在节…...

从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)

设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile&#xff0c;新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...

VM虚拟机网络配置(ubuntu24桥接模式):配置静态IP

编辑-虚拟网络编辑器-更改设置 选择桥接模式&#xff0c;然后找到相应的网卡&#xff08;可以查看自己本机的网络连接&#xff09; windows连接的网络点击查看属性 编辑虚拟机设置更改网络配置&#xff0c;选择刚才配置的桥接模式 静态ip设置&#xff1a; 我用的ubuntu24桌…...

【JVM面试篇】高频八股汇总——类加载和类加载器

目录 1. 讲一下类加载过程&#xff1f; 2. Java创建对象的过程&#xff1f; 3. 对象的生命周期&#xff1f; 4. 类加载器有哪些&#xff1f; 5. 双亲委派模型的作用&#xff08;好处&#xff09;&#xff1f; 6. 讲一下类的加载和双亲委派原则&#xff1f; 7. 双亲委派模…...

【Linux】Linux 系统默认的目录及作用说明

博主介绍&#xff1a;✌全网粉丝23W&#xff0c;CSDN博客专家、Java领域优质创作者&#xff0c;掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围&#xff1a;SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物…...

Qemu arm操作系统开发环境

使用qemu虚拟arm硬件比较合适。 步骤如下&#xff1a; 安装qemu apt install qemu-system安装aarch64-none-elf-gcc 需要手动下载&#xff0c;下载地址&#xff1a;https://developer.arm.com/-/media/Files/downloads/gnu/13.2.rel1/binrel/arm-gnu-toolchain-13.2.rel1-x…...

Bean 作用域有哪些?如何答出技术深度?

导语&#xff1a; Spring 面试绕不开 Bean 的作用域问题&#xff0c;这是面试官考察候选人对 Spring 框架理解深度的常见方式。本文将围绕“Spring 中的 Bean 作用域”展开&#xff0c;结合典型面试题及实战场景&#xff0c;帮你厘清重点&#xff0c;打破模板式回答&#xff0c…...