Python自动化之Excel利器openpyxl

news2024/11/27 2:37:08

文章目录

  • 前言
  • 一、Workbook
    • 1.1 读取xlsx文件
    • 1.2 保存
  • 二、Sheet
    • 2.1 创建Sheet
    • 2.2 遍历Sheet
    • 2.3 移动Sheet
    • 2.4 删除Sheet
    • 2.5 插入、删除行列
  • 三、单元格
    • 3.1 获取某个单元格
    • 3.2 遍历单元格
    • 3.3 获取范围单元格
    • 3.4 单元格赋值
    • 3.5 合并/解除合并单元格
    • 3.6 单元格数据格式
    • 3.7 单元格数字格式
  • 四、样式
    • 4.1 字体
    • 4.2 填充
    • 4.3 边框
    • 4.4 对齐
    • 4.5 内建样式
  • 参考

前言

OpenPyXL_Logo

openpyxl 是一个 用于读写Excel 2010 xlsx/xlsm/xltx/xltm 文件的Python库,最初是基于PHPExcel。

可以通过pip安装

pip install openpyxl

官方文档:https://openpyxl.readthedocs.io/en/stable/

源码地址:https://foss.heptapod.net/openpyxl/openpyxl

一、Workbook

1.1 读取xlsx文件

通过 load_workbook加载文件

def load_workbook(filename, read_only=False, keep_vba=KEEP_VBA,
                  data_only=False, keep_links=True):
  • filename:一般为 xlsx 文件名
  • read_only:只读,不能编辑
  • keep_vba:保留VBA内容,当设为True时要保存为xlsm格式,xlsx不能保存VBA代码
  • data_only:当为True时,公式内容被读取时是公式计算出来的值,而不是公式
  • keep_links:保留链接
import openpyxl

wb = openpyxl.load_workbook("示例.xlsx")
valueWb = openpyxl.load_workbook("示例.xlsx", data_only = True)

1.2 保存

wb.save('修改后.xlsx')

二、Sheet

2.1 创建Sheet

names = ['Sheet', 'Sheet1', 'Sheet2']
for n in names:
	wb.create_sheet(n)
    
# 创建Sheet,插入第一个位置
wb.create_sheet('Sheet3', 0)

2.2 遍历Sheet

# 单个Sheet
ws = wb['Sheet']
ws = wb[0]
# 所有Sheet
wb.worksheets
# 所有Sheet名字
wb.sheetnames
# 遍历所有Sheet
for sheet in wb:
    print(sheet)
# Sheet标题
ws.title

2.3 移动Sheet

ws=wb['Sheet2']
wb.move_sheet(ws, -1)

2.4 删除Sheet

ws=wb['Sheet1']
wb.remove(ws)

del wb['Sheet']

2.5 插入、删除行列

# 在第1行前插入2行
ws.insert_rows(1, 2)
# 在第1列前插入2列
ws.insert_cols(1, 2)

# 增加一行
ws.append([1, 2, 3])

# 从第6行开始,往下删除3行
ws.delete_rows(6, 3)
# 删除第6列
ws.delete_cols(6)

三、单元格

3.1 获取某个单元格

cell = ws[A1]
ws.cell(row=1, column=1)

# 获取单元格值
cell.value

# 获取单元格坐标A1
cell.coordinate

3.2 遍历单元格

# 按行遍历
for row in ws.iter_rows(min_row=1, max_col=3, max_row=2):
    for cell in row:
        print(cell)

# 按列遍历
for col in ws.iter_cols(min_row=1, max_col=3, max_row=2):
     for cell in col:
         print(cell)
         
# 遍历范围单元格
cellRange=ws['A1:B3']
for row in cellRange:
    for cell in row:
        print(cell.value)

3.3 获取范围单元格

# 范围单元格
cellRange=ws['A1:B3']

# 单元格行
a=ws[1]
b=ws[5:10]

# 单元格列
c=ws['A']
d=ws['C:D']

3.4 单元格赋值

ws['A1'] = 12

ws.cell(row=1, column=1, value = 12)

3.5 合并/解除合并单元格

ws.merge_cells('A2:D2')
ws.unmerge_cells('A2:D2')

ws.merge_cells(start_row=2, start_column=1, end_row=4, end_column=4)
ws.unmerge_cells(start_row=2, start_column=1, end_row=4, end_column=4)

3.6 单元格数据格式

cell.data_type
  • b 布尔值,bool
  • e 错误字符串,error_string (‘#NULL!’, ‘#DIV/0!’, ‘#VALUE!’, ‘#REF!’, ‘#NAME?’, ‘#NUM!’, ‘#N/A’)
  • d 时间,date
  • f 公式,formual
  • n 空或数字,null/number
  • s 字符串,string

3.7 单元格数字格式

cell.number_format
  • General 常规
  • 0.00_);[Red]\(0.00\) 数字
  • mm-dd-yy 短日期
  • [$-F800]dddd,\ mmmm\ dd,\ yyyy 长日期
  • [$-F400]h:mm:ss\ AM/PM 时间
  • 0.00% 百分数
  • # ?/? 分数
  • 0.00E+00 科学计数法
  • @ 文本

四、样式

具体默认内建样式可以见源码:https://foss.heptapod.net/openpyxl/openpyxl/-/blob/branch/3.0/openpyxl/styles/builtins.py

from openpyxl.styles import PatternFill, Border, Side, Alignment, Protection, Font

4.1 字体

font = Font(name='Calibri',
                 size=11,
                 bold=False,
                 italic=False,
                 vertAlign=None,
                 underline='none',
                 strike=False,
                 color='FF000000')
cell.font = font

4.2 填充

fill = PatternFill(fill_type=None,
                 start_color='FFFFFFFF',
                 end_color='FF000000')
cell.fill = fill

4.3 边框

border = Border(left=Side(border_style=None,
                           color='FF000000'),
                 right=Side(border_style=None,
                            color='FF000000'),
                 top=Side(border_style=None,
                          color='FF000000'),
                 bottom=Side(border_style=None,
                             color='FF000000'),
                 diagonal=Side(border_style=None,
                               color='FF000000'),
                 diagonal_direction=0,
                 outline=Side(border_style=None,
                              color='FF000000'),
                 vertical=Side(border_style=None,
                               color='FF000000'),
                 horizontal=Side(border_style=None,
                                color='FF000000')
                )
cell.border = border

4.4 对齐

alignment=Alignment(horizontal='general',
                     vertical='bottom',
                     text_rotation=0,
                     wrap_text=False,
                     shrink_to_fit=False,
                     indent=0)
cell.alignment = alignment 

4.5 内建样式

见文档:https://openpyxl.readthedocs.io/en/stable/styles.html#using-builtin-styles

参考

  1. https://openpyxl.readthedocs.io/en/stable/usage.html

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

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

相关文章

[附源码]Python计算机毕业设计Django儿童早教课程管理系统论文2022

项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,…

算法设计与分析 SCAU19180 集合划分问题

19180 集合划分问题 时间限制:1000MS 代码长度限制:10KB 提交次数:0 通过次数:0 题型: 编程题 语言: G;GCC;VC;JAVA Description 教材课后习题2-8 n个元素的集合{1,2,…,n}可以划分若干个非空子集。例如,当n4时,集合{1,2,3,4}可以划分为15个不同的非…

微信小程序开发学习文档(万字总结,一篇搞定前端开发)

一、微信小程序简介 与网页开发不同,小程序有自己的一套标准开发模式:-申请小程序开发账号-安装小程序开发工具-创建和配置小程序项目 1.1 创建第一个小程序 1.2 主界面的5个组成部分 1.3小程序项目的基本构成 pages 用来存放所有小程序的页面&#xf…

Java并发编程—Thread类中的start()方法如何启动一个线程【原理分析】?

一、java线程的介绍: 在java的开发过程中,很多铁子对于java线程肯定不感到陌生,作为java里面重要的组成部分,这里就从如何创建一个线程给大家进行分析; 二、相关知识引入: ​ 之前我了解过,j…

2022年浙江省中职组“网络空间安全”赛项模块B--Windows渗透测试

2022年中职组浙江省“网络空间安全”赛项 B-1:Windows渗透测试一、竞赛时间 420分钟 共计7小时 吃饭一小时 二、竞赛阶段 竞赛阶段 任务阶段 竞赛任务 竞赛时间 分值 第①阶段: 单兵模式系统渗透测试 任务一: Windows操作系统渗透测试 任务二: Linux操作系统渗透测试 任务三…

[附源码]Python计算机毕业设计SSM科技项目在线评审系统(程序+LW)

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

segmenter

patch embedding:例如输入图片大小为224x224,将图片分为固定大小的patch,patch大小为16x16,则每张图像会生成224x224/16x16196个patch,即输入序列长度为196,每个patch维度16x16x3768,线性投射层…

hexo+github手把手教你部署个人博客

一、安装并配置Node.js(原本就有安装) 参考:(1条消息) Node.js安装与配置(详细步骤)_普通网友的博客-CSDN博客_nodejs安装配置 一、下载Node.js官网下载 安装位置与环境变量配置 系统属性-环境变量-系统变量-Path 验…

129页4万字某智慧能源集团数字化管控平台项目 建设方案

目录 数字化管控平台相关项目建议书 1 目录: 1 一、相关项目背景 2 二、需求理解 3 2.1 需求理解 3 三、方案设计 5 3.1 整体方案设计 7 3.3.1 整体架构 7 3.3.2 解决方案说明 8 3.3.3 需求应答 10 3.2 数据仓库 11 3.2.1 数据仓库架构 11 3.2.2 数据仓库产品说明 1…

springMVC01,【第一个springMVC例子(注解版):HelloWorld】

springMVC01,【第一个springMVC例子-注解版:HelloWorld】创建项目1.配置web.xml2.编写spring配置文件3.controller层3.1RequestMapping注解4.运行测试5.小结链接: springMVC01,springMVC的执行流程【第一个springMVC例子(XML配置版本)&#x…

一种多引擎可视化数据流实现方案

企业大数据处理的挑战 随着大数据时代的到来,数据量迅猛增长,给传统的分析技术带来了巨大的冲击和挑战,企业面临着大数据处理的巨大挑战。将复杂的大数据处理问题进行简化,以便企业有更多人能够进行大数据处理,进而整…

使用azure-data factory

data-fatory介绍 Azure Data Factory(简写 ADF)是Azure的云ETL服务,简单的说,就是云上的SSIS。ADF是基于云的ETL,用于数据集成和数据转换,不需要代码,直接通过UI(code-free UI&…

[附源码]SSM计算机毕业设计疫情防控期间人员档案追寻系统设计与实现论文JAVA

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

操作系统实验5:信号量的实现与应用

写在最前的总结 下面的实验内容是在完整做完实验时候补充的,这里先把踩过的坑记录一下。 调试总结 先在Ubuntu上模拟生产者—消费者问题。这个实验分为两大部分,一个是实现信号量,另一个是验证信号量。对于第二个,建议先在Ubun…

银河麒麟 linux V10 安装JDK

1、安装JDK之前,先查看系统是否已安装JDK相关软件包: 2. 如果已经安装过,可以先卸载(可以跳过) 3. 下载并解压jdk包 # 将下载好的jdk压缩包解压到指定目录/usr/local/jdk8 mkdir /usr/local/jdk8 cp jdk-8u271-linu…

详解设计模式:享元模式

享元模式(Flyweight Pattern),是对象池的一种体现,也是 GoF 的 23 种设计模式中的一种结构型设计模式。 享元模式 主要用于减少创建对象的数量,以减少内存占用和提高性能。它提供了减少对象数量从而改善应用所需的对象…

[附源码]Python计算机毕业设计SSM跨移动平台的新闻阅读应用(程序+LW)

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

二、Eureka服务注册与发现

Eureka服务注册与发现 Eureka基础知识 什么是服务治理 SpringCloud封装了Netflix公司开发的Eureka模块来实现服务治理。 在传统的RPC远程调用框架中,管理每个服务与服务之间依赖关系比较复杂、所以需要进行服务治理,管理服务与服务之间依赖关联&…

网上商店商城购物系统(asp.net,sqlserver,三层架构)

网上商店商城购物系统(asp.net,sqlserver,三层)(毕业论文10000字以上,程序代码,SqlServer数据库) 【运行环境】 VisualStudio SqlServer 代码下载: 链接:https://pan.baidu.com/s/1gzX_-Dzrt5jDHvQOCTN7qQ 提取码:8888 【项目包含内容…

Docker with IPV6

1、绪论 在 Docker 容器或群服务中使用 IPv6 之前,您需要在 Docker 守护进程中启用 IPv6 支持。之后,您可以选择对任何容器、服务或网络使用 IPv4 或 IPv6(或两者) 2、配置默认 Docker IPv6 注意:IPv6 网络仅在 Lin…