openpyxl-(操作Excel)

2023-10-30

文档:https://openpyxl.readthedocs.io/en/stable/index.html
注意事项:
1、查看正在打开的excel表格就不会报错,但是,如果操作正在打开的excel表格,就会报错。

# 写入异常,因为你正在打开当前的 excel。关闭即可。
PermissionError: [Errno 13] Permission denied: '审计模板.xlsx'

1、实例化

  • 感觉好像两个都可以用。
from openpyxl import load_workbook
from openpyxl import Workbook

wb = load_workbook("data.xlsx")  # 实例化;如果是新文件,默认会创建一个工作表
wb = Workbook("data.xlsx")  # 实例化

下面开始,ws 就是工作表,wb 就是表格实例化。

下面开始,ws 就是工作表,wb 就是表格实例化。

下面开始,ws 就是工作表,wb 就是表格实例化。


2、操作工作表(sheel)


创建工作表

wb.create_sheet('Datas', 0)
# 第一个参数写要创建的工作表名字,第二个参数是将创建的工作表放在哪里
# 名字不写,则默认(Sheet、Sheet1、Sheet2、...), 第二个参数不写,则默认添加到后面。

对新表操作

# 这样可以直接对新表进行操作
ws2 = wb.create_sheet()  # 表对象
ws2['F5'] = 3.14

获取所有工作表的名称

wb.get_sheet_names()  # 获取所有sheet的名称;已弃用
wb.sheetnames  # 现在用这个
# 循环输出 sheet 的名称。
wb = load_workbook('data.xlsx')
for i in wb:
    print(i.title)

使用工作表

sheet = wb.active  # 获取第一个 sheet
# 使用指定工作表


修改工作表名称

ws = wb.active
ws.title = "range names"  # 对第一个工作表修改名字

删除工作表

wb.remove_sheet(wb.get_sheet_by_name("Da"))  # 括号参数写工作表的名字
print(wb.get_sheet_names())  # 获取所有sheet的名称

保存

# 所有的操作都需要保存才生效。
wb.save('data.xlsx')  # 保存文件,注意:如果该文件存在,则覆盖原有的文件

3、操作单元格


获取最大列(max_column)

sheet.max_column  # 获取最大列,要先用了active方法正在使用的sheet,才能用这个方法去获取最大列和最大行

获取最大行(max_row)

sheet.max_row  # 获取最大行

获取行和列的值

# sheet.rows为生成器, 里面是每一行的数据,每一行又由一个tuple包裹。
# 按行获取,所以下面的代码是返回A1, B1, C1这样的顺序
for row in sheet.rows:
	for cell in row:
		print(cell.value) # 使用value方法,显示单元格的值
# sheet.columns类似,不过里面是每个tuple是每一列的单元格。
# 按竖获取, A1, A2, A3这样的顺序
for column in sheet.columns:
	for cell in column:
		print(cell.value)  # 使用value方法,显示单元格的值
# 如果要获取指定行的内容,因为使用rows方法获取到的单元格是元祖数据,下面要将获取到的rows数据使用list方法转换成列表,
# 然后写入索引,就可以获取指定行的内容了,如果要获取竖的内容,就将rows换成columns
for cell in list(sheet.rows)[1]:  # 获取第二行内容,记得,列表的索引是从0开始算的
	print(cell.value)
    
# 获取任意区间的单元格,使用range即可
# 注意range从1开始的,因为在openpyxl中为了和Excel中的表达方式一致,并不和编程语言的习惯以0表示第一个值。
for i in range(1,4):
	for y in range(1,3):
		print(sheet.cell(row=i, column=y).value)

获取单元格的值(value)

wb = load_workbook('最终版1 - 审计项目整改落实情况表.xlsx')
ws = wb.active
print(ws['A1'].value)  # 输出 A1 的单元格的值。
b4_too = ws.cell(row=1, column=1)  # 使用cell方法查看表格的单元格,括号里的参数(row代表行,column代表列)
print(b4_too.value)  # 使用value方法,显示单元格的值

只读模式

  • 优点:加载速度快
原理:
有时,您需要打开或写入非常大的 XLSX 文件,而 openpyxl 中的常见例程将无法处理该负载。幸运的是,有两种模式使您能够以(接近)恒定内存消耗读取和写入无限量的数据。
openpyxl.worksheet._read_only.ReadOnlyWorksheet 是只读的
与普通工作簿不同,只读工作簿将使用延迟加载。必须使用该close()方法显式关闭工作簿。
from openpyxl import load_workbook
wb = load_workbook(filename='large_file.xlsx', read_only=True)  # read_only=True就是只读模式
ws = wb['big_data']  # 这个是工作表的名

for row in ws.rows:
    for cell in row:
        print(cell.value)

wb.close()
返回的单元格不是常规的openpyxl.cell.cell.Cell而是 openpyxl.cell._read_only.ReadOnlyCell.

写入

# 对 A9 单元格新增值
ws['A9'] = 'create1'
ws['A9'].value = 'create1'
# 要写入数据,就要先使用active方法
sheet = wb.active  # 数据直接分配到单元格中
# 按行添加数据,在这里使用append,python会自动转换类型
ws.append([1, 2, 3])
ws.append([2, 2, 3, 4])
ws.append(['嘿嘿', '哈哈', '呵呵'])
# 使用for就可以对第一列添加数据了
for i in range(10):
	ws.append([i])

# 下面4行代码可将a列表放进第一列,b列表放进第二列
a = [123,465,897,51,65465,498,65]
b = [65,498,65,4,51,65,495,49]
for z, x in list(zip(a,b)):
	ws.append([z,x])
	pass

wb.save(r'D:\IT\aa.xlsx')  # 保存文件,注意:如果该文件存在,则覆盖原有的文件

写入公式

ws["A1"] = "=SUM(1, 1)"

合并单元格

# 第一种方法
ws.merge_cells('A5:A6')  # A5至A6合并
ws.unmerge_cells('A5:A6')  # A5至A6取消合并

ws.merge_cells('A5:A7')  # A5至A7合并
ws.unmerge_cells('A5:A7')  # A5至A7取消合并

ws.merge_cells('A6:C8')  # 大范围合并;A6 ~ C8 合并单元格。
# 第二种方法
ws.merge_cells(start_row=6, start_column=1, end_row=8, end_column=3)  # 第6行第1列开始至第8行第3列合并
ws.unmerge_cells(start_row=6, start_column=1, end_row=8, end_column=3)
# start_row=开始行,start_column=开始列,end_row=结束行,end_column=结束列

插入图片

# 插入的图片会根据图片大小而溢出单元格。
img = Image('1.png')  # 读取图片
ws.add_image(img, 'A7')  # A7单元格添加图片

wb.save("data2.xlsx")

只写模式

from openpyxl import Workbook

wb = Workbook(write_only=True)
ws = wb.create_sheet()  # 不需要写这个,写了就会多创建一个了。Workbook 实例化会自动创建的。

# 生成100行200列的数据
for irow in range(100):
    ws.append(['%d' % i for i in range(200)])

wb.save('data.xlsx')
  • 与普通工作簿不同,新创建的只写工作簿不包含任何工作表;必须使用该create_sheet()方法专门创建工作表。
  • 在只写工作簿中,行只能用 append(). 这是不可能的写入(或读取)的细胞以与任意位置cell()iter_rows()
  • 它能够导出无限量的数据(甚至超过 Excel 实际可以处理的数据量),同时将内存使用量保持在 10Mb 以下。
  • 只写工作簿只能保存一次。之后,每次尝试将工作簿或 append() 保存到现有工作表都会引发openpyxl.utils.exceptions.WorkbookAlreadySaved 异常。
  • 在实际单元格数据之前出现在文件中的所有内容都必须在添加单元格之前创建,因为它必须在此之前写入文件。例如,应在添加单元格之前设置freeze_panes。

更改字体样式(Font)

from openpyxl.cell import WriteOnlyCell
from openpyxl.styles import Font

cell = WriteOnlyCell(ws, value="hello world")  # value=单元格的值
cell.font = Font(name='Courier', size=36)  # 字体和字体大小
ws.append([cell])
class Font(Serialisable):
	def __init__(
        self, 
        name=None,  # 字体
        sz=None, 
        b=None, 
        i=None, 
        charset=None,
        u=None, 
        strike=None, 
        color=None,  # 字体颜色
        scheme=None, 
        family=None, 
        size=None,  # 字体大小
        bold=None,  # 是否加粗
        italic=None,  # 是否斜体
        strikethrough=None, 
        underline=None,
        vertAlign=None, 
        outline=None, 
        shadow=None, 
        condense=None,
        extend=None
    ):

添加注释(批注)

  • 在表格里面应该叫批注。
from openpyxl.cell import WriteOnlyCell
from openpyxl.comments import Comment

cell = WriteOnlyCell(ws, value="hello world")  # 单元格的值
cell.comment = Comment(text="A comment", author="Author's Name")  # text=注释,author=添加注释的作者
ws.append([cell])
from openpyxl.comments import Comment
from openpyxl import load_workbook

wb = load_workbook('data1.xlsx')
ws = wb.active
# A6 单元格写批注
ws['A6'].comment = Comment(text="A comment", author="Author's Name")  # text=注释,author=添加注释的作者

wb.save('data2.xlsx')

在行或列插入空行

wb = load_workbook('data1.xlsx')
ws = wb.active

ws.insert_rows(5)  # 在第5行插入空行
ws.insert_cols(5)  # 在第5列插入空行

wb.save('data2.xlsx')
wb.close()

删除行或列

ws.delete_cols(1)  # 删除第一行
ws.delete_rows(1)  # 删除第一列

图表

https://openpyxl.readthedocs.io/en/stable/charts/introduction.html

所有的样式都在这

# 所有的样式都在这里面
from openpyxl.styles import *
from openpyxl.styles import Font  # 字体样式
from openpyxl.styles import PatternFill  # 填充图案和渐变色
from openpyxl.styles import Border  # 单元格的边框
from openpyxl.styles import Alignment  # 单元格的对齐方式等

边框

  • 四周边框
cell.border = Border(
    left=Side(style='thin'), 
    right=Side(style='thin'), 
    top=Side(style='thin'), 
    bottom=Side(style='thin')
)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

openpyxl-(操作Excel) 的相关文章

随机推荐

  • DVWA 通关笔记:JavaScript Attacks

    概述 什么是JavaScript Attack JavaScript Attack即JS攻击 攻击者可以利用JavaScript实施攻击 通关要求 提交 success 一词即可获胜 下面我们分别对Low 低级 Medium 中级 High
  • java流程控制语句

    流程控制语句 一 分支语句 1 1 流程控制语句分类 1 2 if语句 1 3 switch语句 二 循环语句 2 1 for循环语句 2 2 while循环语句 2 3 do while循环语句基本格式 2 4 三种循环的区别 2 5 跳
  • 一种基于深度学习的单导联心电信号睡眠呼吸暂停检测方法

    在R峰识别的基础上 加入S峰的识别 并论正了该策略对检测结果的有效性 1 大致方法 将数据集 ECG信号 划分为每五分钟的一个片段 为了减少噪声和信号伪影 首先对信号应用了一个有限脉冲响应 FIR 带通滤波器 使用保持8 12Hz的带通滤波
  • 【Lingo 18.0及其安装教程】

    Lingo 18 0及其安装教程 Lingo是Linear Interactive and General Optimizer的缩写 即 交互式的线性和通用优化求解器 由美国LINDO系统公司 Lindo System Inc 推出的 可以
  • 小程序使用变量的值作为变量使用

    使用同一个日期选择组件 给不同的日期选择框赋值 发现想动态的给不同的组件赋值 这时候需要根据变量中暂存的组件变量赋值 这里做一下记录 calendarSelect event this setData calendarVisable fal
  • Linux常用命令-文件操作 网络命令 性能命令

    1 1文件操作命令 改变目录 cd 查看当前路径 pwd 创建目录 mkdir tmp test 创建文件 touch tmp a txt 删除文件或文件夹 rm tmp a txt 删除文件 rm r tmp test 删除文件夹 复制文
  • table2excel 导出表格有边框,文字居中

    应项目需要 前端直接导出表格中的数据 百度找到了table2excel 很实用 但是导出的表格没有边框 且表格中的数据没有居中 网上没找到对应的办法 就自己对table2excel js做了修改 能够实现导出的表格有边框 文字居中的要求 故
  • python print格式化输出

    在 Python 中 以 f 或 F 前缀开始的字符串表示格式化字符串字面量 通常称为 f string 从 Python 3 6 开始引入 它们是一种在字符串中嵌入表达式的新方法 这些表达式在运行时会被评估 然后使用 将它们插入到字符串中
  • Maven项目出现 ;about:black#block

    这是因为url路径有问题 检查元素 看到action是空的 解决这个问题 就可以解决问题了 这么简单的问题 为啥没有发现 因为配了域名映射的缘故 tomact一直访问的是 该文件下的项目 而我的工程项目是放在webapps下面的 这就导致我
  • NFS服务器的搭建(文件共享)

    NFS NFS目的是让不同计算机不同操作系统之间可以彼此共享文件 采用服务器 客户端工作模式ip 在NFS服务器上将目录设置为输出目录 即共享目录 后 客户端就可以将这个目录挂载到自己系统中的某个目录下 什么是RPC守护进程 使用NFS服务
  • Qt lambda 简化你的代码 connect 写法示例 省略槽函数定义

    简述 lambda 来姆达啊 很标准哈哈 英 l md 美 l md 百度百科 Lambda 表达式 lambda expression 是一个匿名函数 Lambda表达式基于数学中的 演算得名 直接对应于其中的lambda抽象 lambd
  • 关于vue项目刷新当前页面,获取数据改变后的页面

    vue项目刷新当前页面的几种方法 vue因为生命周期的原因 很多时候碰到这种情况 页面点击修改按钮 相应需要改变的数据不改变 只有F5情况下才能刷新数据已经修改后的页面 因为虽然点击了修改数据按钮 但是vue的生命周期已经执行完了 所以页面
  • 人脸检测、对齐、跟踪、识别 论文收集

    转自 https github com ChanChiChoi awesome Face Recognition
  • 目标检测算法FPN(Feature Pyramid Networks)简介

    目标检测算法Feature Pyramid Networks FPN 由Tsung Yi Lin等人于2017年提出 论文名字为 Feature Pyramid Networks for Object Detection 可以从https
  • SLAM笔记(七)回环检测中的词袋BOW

    1 词频 摘自阮一峰博客 参见附录参考 如果某个词很重要 它应该在这篇文章中多次出现 于是 我们进行 词频 Term Frequency 缩写为TF 统计 考虑到文章有长短之分 为了便于不同文章的比较 进行 词频 标准化 一般分母设置为文章
  • Centos7镜像下载教程(2023年,4月)

    一 因为Centos官网是挂在国外的服务器上 下载镜像时相比于国内的下载速度会慢很多 所以在这里向大家分享两个国内的镜像站去下载Centos镜像 二 前往阿里云镜像站下载Centos7镜像 1 阿里云官网地址 https www aliyu
  • 广度/宽度优先搜索(BFS)

    转自 https blog csdn net raphealguo article details 7523411 1 前言 广度优先搜索 也称宽度优先搜索 缩写BFS 以下采用广度来描述 是连通图的一种遍历策略 因为它的思想是从一个顶点V
  • js回调函数(callback)

    回调函数 其实简单理解的话就是在一个函数执行完毕后 得到想要的特定数据后在去执行的函数 我门直接看示例 2 getdata check 运行getdata函数 实参为check函数 1 function getdata callback 这
  • Beautiful Soup 安装教程(学习python爬虫必备库)

    文章目录 Beautiful Soup 库 一 安装 1 通过 pip 安装 2 下载安装包安装 二 验证 三 其它系统安装方式 Linux 和 Mac 1 Linux 系统基本安装方法 2 Mac 系统基本安装方法 相关链接 Beauti
  • openpyxl-(操作Excel)

    文档 https openpyxl readthedocs io en stable index html 注意事项 1 查看正在打开的excel表格就不会报错 但是 如果操作正在打开的excel表格 就会报错 写入异常 因为你正在打开当前