openpyxl删除添加excel列_Python | 如何使用Python操作Excel(二)

f6dcc2076076258aea03729560488430.png

0 前言

在阅读本文之前,请确保您已满足或可能满足一下条件:

  1. 请确保您具备基本的Python编程能力。

  2. 请确保您会使用Excel。

  3. 请确保您的电脑已经安装好Python且pip可用。

  4. 请确保您已经读过前文:

    如何使用Python操作Excel(一)LogicPanda,公众号:编程杂艺Python | 使用Python操作Excel文档(一)

从如何使用Python操作Excel(一)中,我们可以得到一个“example.xlsx”文件,内容如图。

a9955ad1fd21055ece83004ff9781540.png

本文会继续讲解openpyxl的用法。

1. 在工作表中插入/删除行/列

对工作表的行或列进行操作时,使用Worksheet类中的方法,insert_row(),delete_row(),insert_col(),delete_col()

from openpyxl import load_workbookimport openpxlwb = load_workbook("example.xlsx")ws = wb.get_sheet_by_name("demo")ws.insert_rows(1) # 在第一行前插入一行ws.insert_rows(1, 2) # 在第一行前插入两个ws.delete_rows(2) # 删除第二行ws.delete_rows(2, 2) # 删除第二行及其后边一行(共两行)ws.insert_cols(3) # 在第三列前插入一列ws.insert_cols(3, 2) # 在第三列前插入两列ws.delete_cols(4) # 删除第四列ws.delete_cols(4, 2) #删除第四列及其后边一列(共两列)wb.save("example.xlsx")

2. 访问单元格

在前文中我们讲到了如何访问单元格,如:

ws['A1']ws['A1'].value

我们还可以使用行或列的方式访问:

ws['A'][1].value # ws['A1'].valuews[1][2].value # ws['C1'].valuews['A'] # 会返回元祖,‘A’列中所有的内容ws[1] # 会返回元祖,第1行中所有的内容
>>> ws[1]      (, , , , , , , , , , , , , , , , , , )>>> ws['A']      (, , , , , , , , , , , , , , , , , , )

PS:我们还可用切片的方式来访问一个范围内的单元格。

>>> ws["A1:B3"]  ((, ),(, ),(, ))>>> ws["A1:B3"][1][1].value      4>>> ws['A1':'B3']    ((, ),(, ),(, ))>>>

请留意两种切片的不同。

还可以使用行切片或者列切片:

>>> ws['A:B']((, , , , , , , , , , , , , , , , , , ), (, , , , , , , , , , , , , , , , , , ))>>> ws[1:2]((, , , , , , , , , , , , , , , , , , ), (, , , , , , , , , , , , , , , , , , ))

3. 使用公式

首先你要清晰的明白,你要使用的公式是什么。同时你需要知道的是,openpyxl能够在工作表中执行公式进行计算,但是并不能在程序中打印公式的值

>>> ws['A20']="=SUM(A1:A19)"      >>> ws['A20'].value'=SUM(A1:A19)'>>> wb.save("formula.xlsx") # 请查看A20

即便如此,openpyxl却可以帮助你检查公式名是否正确:

>>> from openpyxl.utils import FORMULAE>>> "SUM" in FORMULAE      True

当然,你也可以用print(FORMULAE) 来看看都有什么公式可以用(与Excel并没有什么不一样)。

4. 移动单元格

使用ws.move_range()方法来移动单元格。

ws.move_range("D4:F10", rows=-1, cols=2)

会将单元格D4-F10,向上移动1行,想右移动两行。参数ows和cols用来控制单元格的移动方向。如果目标单元格有内容,会被覆盖。

5. 拆分/合并单元格

使用ws.merge_cells()和ws.unmerge_cell()l来和合并,拆分单元格。

>>> ws.merge_cells('A2:D2') # 值为ws['A2']的值>>> ws["A2"] # >>> ws["A2"].value # 2>>> ws["B2"].value # 空>>> ws.unmerge_cells('A2:D2') # 值会回到ws['A2'],'B2: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)

6. 插入图片

想要用openpyxl向工作表中插入图片,需要安装Pillow库:

from openpyxl.drawing.image import Imageimg = Image('logo.jpg')      ws.add_image(img, 'A21')wb.save("img.xlsx")

14dd8e3d9019bbf3d61e4106d5039743.png

7. 折叠

ws1 = wb.create_sheet() # 新建一张表Sheetws1.column_dimensions.group('A','D', hidden=True) # 列折叠,A-D列ws1.row_dimensions.group(1,10, hidden=True) # 行折叠 1-10行wb.save('group.xlsx')

a711549664fe15f0b7a0621d7da8ef29.png

8. 只读模式与只写模式

只读模式,仅用来读取文档内信息,不可写。

wb = load_workbook(filename="example.xlsx", read_only=True)wb.create_sheet("test.xlsx") # 会报错Traceback (most recent call last):  File "", line 1, in     wb.create_sheet("test.xlsx")  File "D:\Python\lib\site-packages\openpyxl\workbook\workbook.py", line 194, in create_sheet    raise ReadOnlyWorkbookException('Cannot create new sheet in a read-only workbook')openpyxl.utils.exceptions.ReadOnlyWorkbookException: Cannot create new sheet in a read-only workbook

只写模式,仅用来写入数据。

wb = Workbook(write_only=True)ws = wb.create_sheet()type(ws) # hasattr(ws,"value") # falsehasattr(ws,"title") # True

即是说,ws已经不是worksheet对象,而是WriteOnlyWorksheet对象,也没有value属性,不可以读取单元格的值。这样做是为了让Python处理只有写入大量数据的情况,更快。

9.数字格式

可以使用Cell对象的nember_format属性来查看单元格的数字样式。

wb = load_workbook("example.xlsx")ws = wb.activews['A1'].nember_format # 'General'# 现在将单元格的数字格式设置为数值ws['A1'].nember_format # '0.00_ '# 可以在Python中修改数字格式如:ws['A1'].nember_format = 'General'# 单元格可以直接赋值时间日期类型的数据类型,如:ws['A1'] = datetime.datetime.now()ws['A1'].value # datetime.datetime(2019, 6, 9, 19, 57, 40, 918556)# 可以用is_date属性判断单元格是否为日期类型的数据ws['A1'].is_date

10. 复习下今天内容

今天的内容主要是及第一篇文章之后,继续讲如何使用Python操作单元格和工作表。

  1. 插入/删除行或列,访问单元格的方法

  2. 移动单元格,合并/拆分单元格

  3. 插入图像、使用公式折叠行/列

  4. 使用数字格式,只读和只写模式

好了,今天的内容就到这里了。我们下次见。

如果您对本文或者本公众号感兴趣,欢迎关注我的公众号,留言您想看的内容,在这里,我们一起成长!smiley_63.png

ec6d9bcc4f776760bf7893351eea3a40.png

"不止于编程"

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

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

相关文章

Linux 命令之 timedatectl -- 查看系统当前时区设置

timedatectl命令用于查看当前时区设置。 # 查看当前时区设置 $ timedatectl# 显示所有可用的时区 $ timedatectl list-timezones # 设置当前时区 $ sudo timedatectl set-timezone Americ…

payara 创建 集群_使用Payara Micro的Easy Java EE Microservices

payara 创建 集群想知道如何开始使用Java EE Microservices? 使用Java EE API部署微服务只需要几个快速步骤。 许多人认为Java EE对于与微服务一起使用而言过于繁重,但事实并非如此……尤其是如果您仅利用服务所需的Java EE规范。 在这篇简短的文章中&am…

php导出页面居中设置,PHPExcel导出插入图片和居中问题

首先到网上先下载PHPExcel下载后解压得到这两个文件下载后引用该文件最后编写相关代码:首先是图片插入导出$objDrawing new PHPExcel_Worksheet_Drawing();$objDrawing->setName(‘Photo‘);$objDrawing->setDescription(‘Photo‘);$objDrawing->setPath…

Linux 命令之 loginctl -- 查看系统当前登录的用户

# 列出当前session $ loginctl list-sessions# 列出当前登录用户 $ loginctl list-users# 列出显示指定用户的信息 $ loginctl show-user ruanyf

两台电脑通过usb共享网络_怎样让电脑通过手机共享上网?

手头有部七年前买的安卓智能手机已经不用了,卖掉不值钱,放在家里也是浪费。能否让它继续发挥余热呢?最近找到了一个好办法,就是可以让个人电脑通过它来上网(如下图所示):1. 用数据线将电脑与手机…

有效期判断功能 java_有效的Java第三版有哪些新功能?

有效期判断功能 java自从听说即将出版的有效Java 第三版以来,我一直想知道其中有什么新内容。 我假设将涵盖自Java 6以来引入Java的功能,的确如此。 但是,第三版Java开发人员经典版也有一些其他更改。 在本文中,我提供了有关在第三…

Linux 命令之 touch -- 创建文件

文章目录命令介绍常用选项命令示例(一)创建空文件(二)批量创建文件(三)修改文件的访问时间命令介绍 touch 命令有两个功能:一是用于把已存在文件的时间戳更新为系统当前的时间(默认…

linux redis客户端_你见过能把Redis的主从复制讲这么明白的吗?

概念1.Conception(概念)Redis的复制也就是我们所说的主从复制,主机数据更新后根据配置和策略,自动同步到备机的master/slaver机制,Master以写为主,Slave以读为主。2.Function(功能)读写分离(秉持与RDBMS 相同的设计理念)容灾恢复R…

lombok 简化代码_如何编写更少,更好的代码,或Project Lombok

lombok 简化代码我长期以来一直打算写有关Lombok的文章 ,以至于每当一个自重的Java开发人员都已经听说过它时,我可能会写它。 尽管如此,值得一提的是,如果只是提醒自己,不要犹豫,尝试性能增强工具并查看它们…

discuz3.1用哪个版本php版本好,Discuz应用中心安装模板提示版本号不匹配适用于X3.3 X3.2 X3.1的解决方法...

有时候我们从应用中心安装模板,在应用中心里模板作者设定允许我们的程序版本,但是我们安装时却提示版本号不匹配,那这是为什么呢?经过我们分析发现是因为X3和X3.1,X3.2的模板是完全兼容的,很多模板是在X3的…

Linux 系统服务管理器(初始化系统/init system) -- systemd 及命令 systemctl 的详细介绍

文章目录一、系统服务管理器 systemd(一)systemd 的特性(二)systemd 与 传统 init 系统的区别(三)systemd 的目录和文件(四)systemd 的 Unit 介绍1.Unit 类型2.Unit 的配置文件&…

arch linux arm下载_arm开发板运行hello word的详细过程

arm开发板运行helloword1.uboot的编译​ 这里已经安装好了交叉编译工具链,如果自己的电脑下没有,请自行百度安装。将下载好uboot到linux下,进行解压-->打补丁-->编译-->烧写,执行以下命令完成上述四个步骤(不…

关于通信matlab 仿真,关于MATLAB在通信仿真系统中的运用

关于 MATLAB在通信仿真系统中的运用 卢 钊 贵 广 东南方 电信规 划 咨询 设 计院 有 限公 司 广 东 揭 阳 522031 【摘 要 】本文采用MATLAB软件 ,采集一些图像对其进行图像增 强处理以及MATLAB提供的可视化 SiinuIi nk建立 了扩频通信 系统仿真模 型 ,并…

化学专业尽早转行_尽早查看针对Java 11的功能

化学专业尽早转行随着JDK 10即将进入其候选发布阶段 ,通过JDK 11观察一下之后将会发生什么是很有趣的。 在撰写本文时,四个JEP ( JDK增强建议 )已正式成为JDK 11的目标(可能会出现)。 这篇文章总结了一些当…

系统服务管理与控制程序(Init System/初始化系统)-- Systemd 的 Unit 配置文件详解

文章目录一、Service 的配置文件(一)[Unit] 区块(二)[Service] 区块1.启动命令2.启动类型3.重启行为(三)[Install] 区块二、Target 的配置文件三、重载配置文件和重启服务一、Service 的配置文件 一个服务…

matlab乘法器数量级统一,基于matlab的数字滤波器的设计

1 数字滤波器的概述数字滤波器可以用差分方程、单位取样相应以及系统函数等表示,对于研究系统的实现方法,及它的运算结构来说,用狂徒便是最为直接。一个给定的输入输出关系,可以用多种不同的数字网络来实现。在不考虑量化影响是&a…

spring 计划任务_与Spring的计划任务一起按时运行

spring 计划任务您是否需要每天像闹钟一样在同一时间运行某个流程? 然后,Spring的预定任务适合您。 允许您使用Scheduled注释方法,以使其在指定的时间或内部间隔运行。 在本文中,我们将研究建立一个可以使用计划任务的项目&#x…

小程序 input自动换行_直播 | 最实用的微信小程序自动化测试技术独家揭秘

随着微信小程序的功能和生态日益完善,很多企业级小程序项目的页面越来越多,业务逻辑也越来越复杂。如何做好微信小程序的自动化测试成为测试同学面临的一大难题。如何合理构建多端架构和自动化测试体系?如何深入理解微信小程序特性和技术原理…

sit matlab,LabView SIT工具包的使用和安装说明

之前一直在用Simulink做仿真模型,现在要做测试需要用NI的设备和LabView软件,通过一段时间的学习,在SIT的使用上有了点小认识拿来跟大家分享一下。需要注意的是,必须是先安装MatLab Simulink 然后安装SIT工具包,如果先安…

php cdi_CDI中的事务异常处理

php cdi在Java EE中,在执行事务性业务方法期间引发的异常导致事务回滚。 但是,只有系统异常(即运行时异常)才是这种情况,该方法异常未在方法签名中声明。 对于应用程序异常(即检查的异常)或任何…