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,一经查实,立即删除!

相关文章

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…

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

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

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

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

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

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

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

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

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

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

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

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

opencv 把3通道图像转成单通道_小强学Python+OpenCV之-1.4.3图像(矩阵)加减运算

引入问题引入,考虑以下几个问题:Q1. 一个3通道像素p的BGR分量(8bit表示)值均相同,那么这个像素是什么颜色的?Q2. 该像素p加上自己,即,像素p的各个通道值翻倍,那么这个像素…

mvc 404错误 php,java - springmvc 请求无法到达controller,出现404错误

springmvc 请求无法到达controller,出现404错误web.xmltestmvcindex.htmlindex.htmindex.jspdefault.htmldefault.htmdefault.jspspringmvcorg.springframework.web.servlet.DispatcherServletcontextConfigLocationclasspath:springmvc-servlet.xml1springmvc/org.…

diff算法_传统Diff算法为什么时间复杂度要O(n ^3)

原文链接:https://juejin.im/post/6892671384976097287很多文章提到的都是新旧DOM树需要两两对比,但是没有说清楚为什么。思考大家想一下,如果让你来设计将一棵树转换为另一棵树,你会怎么设计?可能是直接暴力的根据ind…

CentOS 7 Linux 的初始化系统(系统服务管理和控制程序/Init System) -- systemd 详解

文章目录一、systemd 的由来(一)常用的 init 系统(二)init 程序的缺点(三)systemd 简介(四)systemd 架构图二、服务管理三、unit 配置文件(一)概述&#xff0…

python 指针指向的内容,python-文件的读取及指针位置

文件的读取及指针位置打开文件的三步:打开->操作->关闭文件的读取:f open(/tmp/passwd)打开f.close()操作完,关闭文件判断文件对象拥有的权限print(f.readable())是否拥有可读权限True or Falshprint(f.writable())是否拥有可写权限文…

matplotlib 柱状图_Matplotlib数据可视化:柱状图与直方图

↑↑点击上方蓝字,回复资料,嘿嘿,10个G的惊喜柱状图和直方图是两种非常类似的统计图,区别在于:直方图展示数据的分布,柱状图比较数据的大小。直方图X轴为定量数据,柱状图X轴为分类数据。因此&am…

groovy.run 脚本_Picocli 2.0:类固醇上的Groovy脚本

groovy.run 脚本Picocli 2.0增加了对其他JVM语言(尤其是Groovy)的支持。 当Groovy语言具有CliBuilder类的内置CLI支持时,为什么还要使用picocli? 您可能喜欢picocli的使用帮助,默认情况下会显示ANSI 颜色和样式 。 您…

Linux 系统服务管理和控制程序(初始化系统/Init System) -- systemd 介绍

文章目录systemd 简介systemd 启动过程概述Systemd的争议systemd 简介 开发systemd的主要目的就是减少系统引导时间和计算开销。systemd(系统管理守护进程),最开始以GNU GPL协议授权开发,现在已转为使用GNU LGPL协议,…

mongodb msi安装包_跟我快速学数据存储:MongoDB非关系型数据库

想要学习更多编程,就点上方蓝字关注我们MongoDB概述01与Redis半持久化,存储于内存和硬盘不同,MongoDB是直接持久化,存储于硬盘的缓存系统。MongoDB非常流行,其中阿里云提供了云数据库MongoDB版。https://blog.csdn.net…

php页面 info,通过PATH_INFO方法实现页面伪静态_php

/*函数url_parse用于解析url,使用时需要在前面定义define(PATH_INFO,true);需要解析时调用该函数,取值方法用回$_GET[xxx]即可*/function url_parse(){if(!(isset($_SERVER[PATH_INFO])&&defined(PATH_INFO))){return;}$url substr($_SERVER[PA…

fanuc roboguide_FANUC机器人虚拟仿真教程:Roboguide弧焊仿真工作站工装添加

Roboguide软件左侧浏览树中的“Fixture”节点专门用于添加工装资源,软件支持添加自带的库文件数模以及外部导入的CAD数模。软件支持CSB、DXF、STL、IGES、3DS等格式数模文件,一般情况下将将外部数模转换为IGES或CSB格式后进行导入效果会更好一些。本期&a…

如何在 Ubuntu 14.04 和 12.04 上测试 systemd

本来,Ubuntu决定从Ubuntu 16.04 LTS开始使用systemd来替换当前的引导过程。Ubuntu 16.04预计在2016年4月发布,但是考虑到systemd的流行和需求,刚刚发布的Ubuntu 15.04采用它作为默认引导程序。另外,Ubuntu 14.04 Trusty Tahr和Ubu…