python操作Excel常用代码

news/2024/7/21 5:25:18 标签: python, excel, 自动化

使用python做一些excel的办公自动化是很常见的应用,对常用的一些代码做一些总结,方便自己使用。

本文使用的库是Openpyxl,官方文档:https://openpyxl.readthedocs.io/en/stable/

读取

基本读取:

python"># 读取到的是工作簿对象
wb = openpyxl.load_workbook("文件路径")
# 读取指定worksheet
worksheet = wb["sheet名称"]  # 用sheet名进行读取,适用于sheet比较多的情况
worksheet = wb.worksheets[0]  # 也可以用索引来读取,如果Excel只有一个sheet,推荐这种方式

一些其他常用参数:

  • 读取带vba的xlsm格式文件
python"># 读取xlsm时,包含其中的vba代码;否则保存后,其中的vba不可用
wb = openpyxl.load_workbook("文件路径/a.xlsm,", keep_vba=True)
  • 读取带有公式的excel文件
python"># 读取公式的计算结果,默认值是False,也就是读取公式
wb = openpyxl.load_workbook("文件路径/a.xlsx,", data_only=True)
  • 读取Excel中的链接
python"># 是否保留Excel文件中的链接,默认是True
wb = openpyxl.load_workbook("文件路径/a.xlsx,", keep_links=True)

创建

创建一个空的xlsx文件

python">from openpyxl import Workbook
wb = Workbook()
# 获取默认的sheet
ws = wb.active
# 将默认sheet重命名
ws.title = "重命名"
# 创建一个自己命名的sheet,插在最前面
ws2 = wb.create_sheet("sheet名", 0)

复制已有sheet

python">source = wb.active
target = wb.copy_worksheet(source)

读取单元格

获取指定单元格

python"># 读取A1的值
cell = ws["A1"].value
# 给A2赋值
ws["A2"] = 2
# 用单元格索引的方式,同样可以获取A1的值
ws.cell(1, 1).value
# 输入公式
ws["B2"] = "=COUNTA(Sheet1!A2:A20)"

注意,用索引的方式获取单元格时,初始都是从1开始的。这和编程语言中习惯的从0开始不同,但是更直观。

单元格遍历

  • 先获取row,然后遍历row中的每个cell:
python"># 读取2行,3列数据
for row in ws.iter_rows(min_row=1, max_col=3, max_row=2):
    for cell in row:
        print(cell.value)
  • 根据行列的索引遍历
python"># 行的索引,从2到最后一行,因为一般不读取标题行数据
for row in range(2, sheet.max_row+1):
    for col in range(1, sheet.max_column+1):
        value = sheet.cell(row, col).value
  • 根据所见即所得的方式遍历
python">for row in range(2, sheet.max_row+1):
    for col in "ABCDEFG":
        value = sheet[f"{col}{row}"].value

设置单元格格式

在实际应用中,建议是先设置好模板excel的样子,然后把数据填进去。因为用代码设置格式,非常繁琐,下面只举一个简单的例子。具体可以参考:https://openpyxl.readthedocs.io/en/stable/styles.html

python">from openpyxl.styles import PatternFill
from openpyxl.styles import Font

# 首先定义好格式
red_cell = PatternFill("solid", fgColor="FF3030")
green_cell = PatternFill("solid", fgColor="98FB98")
yellow_cell = PatternFill("solid", fgColor="EEEE00")
font_str = Font(name="微软雅黑", size=10)

# 将格式赋值给单元格
sheet["A1"].font = font_str
sheet["A1"].fill = green_cell

保存

保存没啥好说的,不管是读取的还是自己创建的wb对象,直接save就完事了

python">wb.save("存储路径/文件名.xlsx")

举例说明

以下是一个例子

体温数据表格的操作

读取一个体温表(A列是姓名,自己编一些就行了),然后我们生成随机温度,范围在36到42,写入到B列:

python">import openpyxl
import random
from openpyxl.workbook.workbook import Workbook
from openpyxl.worksheet.worksheet import Worksheet
from openpyxl.styles import Font

wb = openpyxl.load_workbook("resources/体温测量结果.xlsx")  # type:Workbook
# sheet = wb.worksheets[0]  # type:Worksheet
sheet = wb["Sheet1"]  # type:Worksheet

font_int = Font(name="Calibri", size=10, color="FF0000")

for row_num in range(2, sheet.max_row+1):
    sheet[f"B{row_num}"] = float(f"{random.uniform(36, 42):.1f}")
    sheet[f"B{row_num}"].font = font_int
    # 生成36到42之间的随机数,保留一位小数

wb.save("resources/体温测量结果.xlsx")

对该表进行操作,标记样式

python">import openpyxl
from openpyxl.workbook.workbook import Workbook
from openpyxl.worksheet.worksheet import Worksheet
from openpyxl.styles import PatternFill
from openpyxl.styles import Font

wb = openpyxl.load_workbook("resources/体温测量结果.xlsx")  # type:Workbook
sheet = wb["Sheet1"]  # type:Worksheet
sheet_len = sheet.max_row

sheet["C1"] = "结果"
red_cell = PatternFill("solid", fgColor="FF3030")
green_cell = PatternFill("solid", fgColor="98FB98")
yellow_cell = PatternFill("solid", fgColor="EEEE00")
font_str = Font(name="微软雅黑", size=10)

for row_num in range(2, sheet_len + 1):
    if sheet[f"B{row_num}"].value <= 37.5:
        sheet[f"C{row_num}"] = "正常"
        sheet[f"C{row_num}"].font = font_str
        sheet[f"C{row_num}"].fill = green_cell
    elif sheet[f"B{row_num}"].value <= 39:
        sheet[f"C{row_num}"] = "低烧"
        sheet[f"C{row_num}"].fill = yellow_cell
    else:
        sheet[f"C{row_num}"] = "病危"
        sheet[f"C{row_num}"].fill = red_cell

wb.save("resources/体温测量结果.xlsx")

用公式做汇总

python">import openpyxl
from openpyxl.workbook.workbook import Workbook
from openpyxl.worksheet.worksheet import Worksheet

wb = openpyxl.load_workbook("resources/体温测量结果.xlsx")  # type:Workbook
sheet = wb.create_sheet("汇总")  # type:Worksheet

sheet["A1"] = "汇总"
sheet["A2"] = "人数"
sheet["B2"] = "=COUNTA(Sheet1!A2:A20)"
sheet["A3"] = "病危"
sheet["B3"] = '=COUNTIF(Sheet1!C2:C28,A3)'
sheet["A4"] = "低烧"
sheet["B4"] = '=COUNTIF(Sheet1!C2:C20,A4)'
sheet["A5"] = "正常"
sheet["B5"] = '=COUNTIF(Sheet1!C2:C20,"正常")'

wb.save("resources/体温测量结果.xlsx")

http://www.niftyadmin.cn/n/5427659.html

相关文章

如何使用第三方接入淘宝商品详情(主图,详情图)

1、找到可用的API接口&#xff1a;首先&#xff0c;需要找到支持查询商品信息的API接口。这些信息通常可以在电商平台的官方文档或开发者门户网站上找到。 2、注册并获取API密钥&#xff1a;在使用API接口之前&#xff0c;需要注册并获取API密钥。API密钥是识别身份的唯一标识符…

一站式数据采集物联网平台:智能化解决方案,让数据管理更高效、更安全

JVS物联网平台的定位 JVS是企业信息化的“一站式解决方案”&#xff0c;其中包括了基础的数字化底座、各种企业级能力、企业内常见的应用&#xff0c;如下图所示&#xff1a; 整体平台能力层有三大基础能力&#xff1a; 低代码用于业务的定义;数据分析套件用于数据的自助式分…

并发编程1-多线程并发编程的基本概念

多线程并发编程是指在一个程序中同时执行多个线程&#xff0c;每个线程都可以独立执行不同的任务&#xff0c;从而提高程序的效率和响应性。以下是多线程并发编程的基本概念&#xff1a; 线程&#xff1a;线程是程序中的执行单元&#xff0c;它可以独立运行&#xff0c;并拥有自…

Apache如何配置https以及80重定向443(一文搞懂)

最近公司项目考虑到安全性要使用https&#xff0c;于是领导就把这个任务交给了我&#xff0c;今天就一次性搞懂https如何配置。 文章目录 一、HTTP和HTTPS概念二、HTTP和HTTPS区别三、Apache安装1. 通过ssh连接到我们的服务器2. 使用yum安装apache 四、配置证书1. 安装ssl证书模…

用户数据的FLASH存储与应用(FPGA架构)

该系列为神经网络硬件加速器应用中涉及的模块接口部分&#xff0c;随手记录&#xff0c;以免时间久了遗忘。 一 背景 我们知道&#xff0c;在FPGA做神经网络应用加速时&#xff0c;涉及到权重参数的存储和加载。通常在推理过程中&#xff0c;会将权重参数存储在外部DDR或片上S…

【投稿优惠-EI稳定检索】2024年图像处理与机械系统工程国际学术会议 (ICIPMSE 2024)

【投稿优惠-EI稳定检索】2024年图像处理与机械系统工程国际学术会议 (ICIPMSE 2024) 大会主题: (主题包括但不限于, 更多主题请咨询会务组苏老师) 图像处理 基于图像的渲染 计算机视觉 可视化分析 模式识别 3D打印 渲染和动画 渲染技术 电脑动画 基于草图的建模 机械…

SIP-7043 SV-7043网络吸顶喇叭商场会议室播放器10W网络有源吸顶喇叭

SIP-7043 SV-7043网络吸顶喇叭商场会议室播放器 10W网络有源吸顶喇叭 一、描述 SIP-7043是我司的一款SIP网络有源吸顶喇叭&#xff0c;具有10/100M以太网接口&#xff0c;内置有一个高品质扬声器&#xff0c;将网络音源通过自带的功放和喇叭输出播放&#xff0c;可达到功率1…

LeetCode 2864. 最大二进制奇数

文章目录 LeetCode 2864. 最大二进制奇数思路1AC CODE思路2AC CODE LeetCode 2864. 最大二进制奇数 题目链接&#xff1a;https://leetcode.cn/problems/maximum-odd-binary-number/description/ 思路1 由于二进制基数的最后一位必须是1&#xff0c;而其他位越大越好&#xf…