Openpyxl--学习记录

news2024/11/25 8:15:40

1.工作表的基本操作

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

1.1.1 创建工作簿

from openpyxl import Workbook
from pathlib import Path

file_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 % 30
    wb.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:
        continue
    wb.remove(i)
wb.save(file_path)

2.单元格基本操作

2.1 获取单元格的值

from pathlib import Path
from openpyxl import load_workbook

file_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,utils

file_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_workbook

file_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, utils

file_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.active

for 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 style
        ws.row_dimensions[1].height = 26
        for cell in ws[1]:
            ws.column_dimensions[get_column_letter(cell.column)].width = len(cell.value) + 1
            cell.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_blue
        for cell in fill_green_cells:
            ws[cell].fill = fill_green
        for cell in fill_red_cells:
            ws[cell].fill = fill_red
        for cell in fill_yellow_cells:
            ws[cell].fill = fill_yellow
        workbook.save(sheet_name)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2223588.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

pytorh学习笔记——cifar10(六)MobileNet V1网络结构

基础知识储备&#xff1a; 一、深度可分离卷积&#xff08;Depthwise Separable Convolution&#xff09; MobileNet的核心是深度可分离卷积&#xff08;Depthwise Separable Convolution&#xff09;&#xff0c;深度可分离卷积是卷积神经网络&#xff08;CNN&#xf…

低代码开发详解与行业应用指南

低代码开发简化软件开发&#xff0c;助力企业数字化转型。ZohoCreator应用于零售、制造、教育、IT、医疗、房地产等行业&#xff0c;提升效率、降低成本。灵活定价&#xff0c;支持免费试用&#xff0c;助力企业快速实现数字化。 一、低代码开发是什么&#xff1f; 低代码开发…

CSS3 动画相关属性实例大全(三)(columns、filter、flex、flex-basis 、flex-grow、flex-shrink属性)

CSS3 动画相关属性实例大全&#xff08;三) &#xff08;columns、filter、flex、flex-basis 、flex-grow、flex-shrink属性&#xff09; 本文目录&#xff1a; 一、columns属性&#xff08;设置元素的列宽和列数&#xff09; 二、filter属性&#xff08;调整图像、背景和边…

打造充电场站:场地选择与合规运营详解

建设一座充电站需要六步流程&#xff1a;准备工作 → 备案 → 土地审核 → 规划审核 → 电力申请 → 验收确认 一、准备工作 在确定建设前&#xff0c;要考察待选的场地&#xff0c;例如空地、停车场等&#xff0c;与场地所有方签订充电站建设合作协议。根据场地和车流量等实际…

Docker 部署 EMQX 一分钟极速部署

部署 EMQX ( Docker ) [Step 1] : 拉取 EMQX 镜像 docker pull emqx/emqx:latest[Step 2] : 创建目录 ➡️ 创建容器 ➡️ 拷贝文件 ➡️ 授权文件 ➡️ 删除容器 # 创建目录 mkdir -p /data/emqx/{etc,data,log}# 创建容器 docker run -d --name emqx -p 1883:1883 -p 1808…

H7-TOOL的LUA小程序教程第15期:电压,电流,NTC热敏电阻以及4-20mA输入(2024-10-21,已经发布)

LUA脚本的好处是用户可以根据自己注册的一批API&#xff08;当前TOOL已经提供了几百个函数供大家使用&#xff09;&#xff0c;实现各种小程序&#xff0c;不再限制Flash里面已经下载的程序&#xff0c;就跟手机安装APP差不多&#xff0c;所以在H7-TOOL里面被广泛使用&#xff…

在矩池云使用智谱情感语音模型GLM-4-Voice,详细指南

GLM-4-Voice 是智谱 AI 推出的端到端语音模型。GLM-4-Voice 能够直接理解和生成中英文语音&#xff0c;进行实时语音对话&#xff0c;并且能够遵循用户的指令要求改变语音的情感、语调、语速、方言等属性。 本文将详细介绍&#xff0c;如何在GPU算力租赁平台矩池云上快速复现、…

MongoDB安装配置及配置和启动服务

MongoDB 安装配置 附&#xff1a;MongoDB官网下载地址&#xff1a; https://www.mongodb.com/download-center/community 注&#xff1a; 官网可以下载最新版的MongoDB安装包&#xff0c;有MSI安装版和ZIP安装版。我们课堂上使用4.4.4的ZIP安装版。安装版参考博客&#xff1…

使用rust实现类似C#中的Convert数据转换类

// 编写一个模块&#xff08;好比是C#的一个类&#xff09; pub mod Convert {// 定义函数&#xff08;好比C#中的方法&#xff09;pub fn ToInt32(s:&str) -> i32 {s.parse::<i32>().unwrap()}pub fn ToInt64(s:&str) -> Result<i64,std::num::ParseIn…

Maven入门到实践:从安装到项目构建与IDEA集成

目录 1. Maven的概念 1.1 什么是Maven 1.2 什么是依赖管理 1.3 什么是项目构建 1.4 Maven的应用场景 1.5 为什么使用Maven 1.6 Maven模型 2.初识Maven 2.1 Maven安装 2.1.1 安装准备 2.1.2 Maven安装目录分析 2.1.3 Maven的环境变量 2.2 Maven的第一个项目 2.2.1…

AUTOSAR CP 中 BswM 模块功能与使用介绍(2/2)

三、 AUTOSAR BswM 模块详解及 ARXML 示例 BswM 模块的主要功能 BswM&#xff08;Basic Software Mode Manager&#xff09;模块在 AUTOSAR 架构中扮演着模式管理的核心角色。它负责管理车辆的各种模式&#xff08;如启动、运行、停车等&#xff09;&#xff0c;并根据不同的…

stm32入门教程--ADC模拟-数字转换器

ADC&#xff08;Analog-Digital Converter&#xff09;模拟-数字转换器 ADC可以将引脚上连续变化的模拟电压转你换位内存中存储的数字变量&#xff0c;建立模拟电路到数字电路的桥梁。 12位逐次逼近型ADC&#xff0c;1us转换时间 输入电压范围&#xff1a;0-3.3V转换结果范围…

MCK主机加固与防漏扫的深度解析

在当今这个信息化飞速发展的时代&#xff0c;网络安全成为了企业不可忽视的重要议题。漏洞扫描&#xff0c;简称漏扫&#xff0c;是一种旨在发现计算机系统、网络或应用程序中潜在安全漏洞的技术手段。通过自动化工具&#xff0c;漏扫能够识别出系统中存在的已知漏洞&#xff0…

基于大型语言模型的智能网页抓取

Google Gemini 是 Google AI 创建的大型语言模型 (LLM) 系列&#xff0c;可提供最先进的 AI 功能。Gemini 模型包括&#xff1a; Gemini Ultra — 最大、最强大的模型&#xff0c;擅长处理编码、逻辑推理和创意协作等复杂任务。可通过 Gemini Advanced&#xff08;原名 Bard&a…

使用QT绘图控件QCustomPlot绘制波形图

使用QT绘图控件QCustomPlot绘制波形图 下载QCustomPlot 下载QCustomPlot,链接路径 解压之后就能看到源代码了 在Qt中添加QCustomPlot的帮助文档 在Qt Creator的菜单:工具–>选项–>帮助–>文档–>添加qcustomplot\documentation\qcustomplot.qch文件。

《PP-OCRv1》论文精读:PaddleOCR是目前SOTA级别的OCR开源技术(截止2024年10月)

PP-OCR: A Practical Ultra Lightweight OCR System论文地址PP-OCRv2: Bag of Tricks for Ultra Lightweight OCR System论文地址PP-OCRv3: More Attempts for the Improvement of Ultra Lightweight OCR System论文地址PaddleOCR Github OCR工具库 43.5K个star PP-OCRv1由百度…

CMU生成式人工智能大模型:从入门到放弃(四)

引言 在之前的系列博客中&#xff0c;我们深入探讨了生成式AI的基础知识、大型语言模型的发展&#xff0c;以及如何通过递归神经网络&#xff08;RNN&#xff09;和Transformer模型来学习语言模型。今天&#xff0c;我们将转向计算机视觉领域&#xff0c;探讨预训练与微调的概…

STM32--SPI原理及应用

1.什么是SPI SPI&#xff0c;Serial Peripheral interface&#xff0c;串行外围设备接口。是Motorola(摩托罗拉)首先在其MC68HCXX系列处理器上定义的。 2.SPI基本特性 SPI&#xff0c;是一种高速全双工的通信总线。广泛地应用在ADC、LCD等设备与MCU间&#xff0c;适用于对通…

微前端架构新选择:micro-app 框架一文全解析

目录 前言技术方案沙箱withiframe 环境变量主应用生命周期子应用生命周期初始化更新卸载缓存 JS 沙箱样式隔离元素隔离路由系统⭐数据通信⭐资源系统预加载umd 模式其他功能调试工具 前言 https://micro-zoe.github.io/micro-app/ micro-app 是由京东前端团队推出的一款微前端…

Qt 支持打包成安卓

1. 打开维护Qt&#xff0c;双击MaintenanceTool.exe 2.登陆进去,默认是添加或移除组件&#xff0c;点击下一步&#xff0c; 勾选Android, 点击下一步 3.更新安装中 4.进度100%&#xff0c;完成安装&#xff0c;重启。 5.打开 Qt Creator&#xff0c;编辑-》Preferences... 6.进…