Python学习DAY14_文档处理_Excel

文档处理

Excel电子表格

        Python 的 openpyxl 模块让我们可以在 Python 程序中读取和修改 Excel 电子表格,由于微软从 Office 2007 开始使用了新的文件格式,这使得 Office Excel 和 LibreOffice Calc、OpenOffice Calc 是完全兼容的,这就意味着 openpyxl 模块也能处理来自这些软件生成的电子表格。

创建 excel 文件

        开始使用 openpyxl 时,无需在文件系统中创建文件,只要导入 workbook 类就可以了。

from openpyxl import Workbookwb = Workbook()

        至少有一个工作表在工作簿创建后,可以通过 Workbook.active 属性来定位到工作表。

ws = wb.active

该工作簿的默认索引是从0开始。除非索引值被修改,否则使用这个方法将总是获取第一个工作表。

         可以使用 Workbook.create_sheet() 方法来创建新工作表。

ws1 = wb.create_sheet("Mysheet") # 插入到最后 (默认)ws2 = wb.create_sheet("Mysheet", 0) # 插入到最前  ws3 = wb.create_sheet("Mysheet", -1) # 插入到倒数第二

        工作表将在创建时按照数字序列自动命名(如 Sheet,Sheet1,Sheet2,……)。可以在任何时候通过 Worksheet.title 属性修改工作表名:

ws.title = "New Title"

        创建的工作表的标签背景色默认是白色。可以通过在 Worksheet.sheet_properties.tableColor 对象中设置 RRGGBB 格式的颜色代码进行修改:

ws.sheet_properties.tabColor = "1072BA"

        当设置了 worksheet 名称,可以将名称作为工作表的索引:

ws3 = wb["New Title"]

        可以通过 Workbook.sheetname 对象来查看工作簿中所有工作表的名称

print(wb.sheetnames)

['Sheet2', 'New Title', 'Sheet1'] 

        可以遍历整个工作簿:

for sheet in wb:print(sheet.title)

        可以使用 Workbook.copy_worksheet() 方法来创建一个工作簿中所有表的副本:

source = wb.active
target = wb.copy_worksheet(source)

        只有单元格(包括值、样式、超链接、备注)和一些工作表对象(包括尺寸、格式和参数)会被复制。其他属性不会被复制,如图片、图表。


        无法在两个工作簿中复制工作表。当工作簿处于只读或只写状态时也无法复制工作表。


 访问一个单元格

        现在我们知道如何获取一个工作表,我们可以开始修改单元格内容。单元格可以通过工作表中的索引直接访问:

c = ws['A4']

        这将返回位于“A4”的单元格内容,如果不存在则创建一个。可以直接对单元格进行赋值:

ws['A4'] = 4

        这是 Worksheet.cell() 的方法。
        工具支持通过行列号访问单元格:

d = ws.cell(row=4, column=2, value=10)

当在内存中创建工作表后,表中不包含任何单元格。单元格将在第一次访问时创建。


        因为这种特性,遍历而不是访问这些单元格将在内存中全部创建它们,即使并没有给它们赋值。比如说:

for x in range(1,101):  for y in range(1,101):  ws.cell(row=x, column=y)

访问多个单元格

        可以通过切片访问一个范围内的单元格:

cell_range = ws['A1':'C2']

        行或列的单元格也可以通过类似的方法访问:

colC = ws['C']
col_range = ws['C:D']row10 = ws[10]
row_range = ws[5:10]

        同样也可以使用 Worksheet.iter_rows() 方法:

for row in ws.iter_rows(min_row=1, max_col=3, max_row=2):for cell in row:print(cell)

<Cell Sheet1.A1>
<Cell Sheet1.B1>
<Cell Sheet1.C1>
<Cell Sheet1.A2>
<Cell Sheet1.B2>
<Cell Sheet1.C2> 

        类似的,使用 Worksheet.iter_cols() 方法将返回列:

for col in ws.iter_cols(min_row=1, max_col=3, max_row=2):for cell in col:print(cell)

<Cell Sheet1.A1>
<Cell Sheet1.A2>
<Cell Sheet1.B1>
<Cell Sheet1.B2>
<Cell Sheet1.C1>
<Cell Sheet1.C2> 

出于性能考虑,Worksheet.iter_cols()方法不支持在只读模式使用

        如果需要遍历文件内的所有行和列,可以使用 Worksheet.rows 属性:

ws = wb.active
ws['C9'] = 'hello world'
tuple(ws.rows)

((<Cell Sheet.A1>, <Cell Sheet.B1>, <Cell Sheet.C1>),
(<Cell Sheet.A2>, <Cell Sheet.B2>, <Cell Sheet.C2>),
(<Cell Sheet.A3>, <Cell Sheet.B3>, <Cell Sheet.C3>),
(<Cell Sheet.A4>, <Cell Sheet.B4>, <Cell Sheet.C4>),
(<Cell Sheet.A5>, <Cell Sheet.B5>, <Cell Sheet.C5>),
(<Cell Sheet.A6>, <Cell Sheet.B6>, <Cell Sheet.C6>),
(<Cell Sheet.A7>, <Cell Sheet.B7>, <Cell Sheet.C7>),
(<Cell Sheet.A8>, <Cell Sheet.B8>, <Cell Sheet.C8>),
(<Cell Sheet.A9>, <Cell Sheet.B9>, <Cell Sheet.C9>)) 

        或者 Worksheet.columns 属性

tuple(ws.columns)

((<Cell Sheet.A1>,
<Cell Sheet.A2>,
<Cell Sheet.A3>,
<Cell Sheet.A4>,
<Cell Sheet.A5>,
<Cell Sheet.A6>,
...
<Cell Sheet.B7>,
<Cell Sheet.B8>,
<Cell Sheet.B9>),
(<Cell Sheet.C1>,
<Cell Sheet.C2>,
<Cell Sheet.C3>,
<Cell Sheet.C4>,
<Cell Sheet.C5>,
<Cell Sheet.C6>,
<Cell Sheet.C7>,
<Cell Sheet.C8>,
<Cell Sheet.C9>)) 

出于性能原因,Worksheet.columns属性不支持只读模式


取值

        如果只需要从工作表中获取值,可以使用 Worksheet.values 属性。这将遍历工作表中所有行,但只返回单元格值:

for row in ws.values:for value in row:print(value)

Worksheet.iter_rows() 和 Worksheet.iter_cols() 可以只返回单元格值:

for row in ws.iter_rows(min_row=1, max_col=3, max_row=2, values_only=True):print(row)

(None, None, None)
(None, None, None)


赋值

        当我们创建了一个单元格对象,我们可以对其赋值:

c.value = 'hello, world'
print(c.value)d.value = 3.14
print(d.value)

'hello, world'

3.14 


保存

        对 Workbook 对象使用 Workbook.save() 方法可以简单安全的保存工作簿:

wb = Workbook()
wb.save('test.xlsx')

该操作将覆盖同名文件,而不会有任何警告


读取文件

        和写操作一样,可以使用 openpyxl.load_workbook() 打开存在的工作簿:

from openpyxl import load_workbook
wb2 = load_workbook('test.xlsx')
print wb2.sheetnames

['Sheet2', 'New Title', 'Sheet1'] 

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

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

相关文章

WPF 两个程序之间传递参数(shell32.dll)

当前文章只是笔记&#xff0c;代码并不完善仅作参考。 完整案例&#xff1a;WPF 两个程序之间传递参数&#xff08;Process&#xff09;_wpf的exe程序传入参数-CSDN博客 主窗口 [DllImport("shell32.dll")]public static extern int ShellExecute(IntPtr hwnd, Str…

边缘计算全面概述

什么是边缘计算&#xff1f; 边缘计算是一种分布式计算概念&#xff0c;将智能集成到边缘设备&#xff08;边缘节点&#xff09;中&#xff0c;使数据能够在数据采集源附近实时处理和分析。由于边缘计算在网络边缘本地处理数据&#xff0c;而不是在云端或集中式数据中心&#…

云端巨擘:大数据与云计算的时代航向

文章目录 大数据时代大数据特点(4v1C大数据与云计算的关系 云计算云计算定义云计算特点云计算分类&#xff08;服务类型&#xff09;云计算实现机制云计算体系结构云计算的管理中间件层 大数据时代 大数据定义&#xff1a;海量数据或巨量数据&#xff0c;其规模巨大到无法通过…

学生时期学习资源同步-1 第一学期结业考试题9

原创作者&#xff1a;田超凡&#xff08;程序员田宝宝&#xff09; 版权所有&#xff0c;引用请注明原作者&#xff0c;严禁复制转载

ArrayList 是如何进行扩容的?

典型回答 ArrayList 在添加元素时&#xff0c;会自动进行扩容操作&#xff0c;它的执行步骤如下&#xff1a; 当 ArrayList 的内部数组空间不足以容纳新增的元素时&#xff0c;会触发扩容机制。ArrayList 会创建一个新的更大的数组&#xff0c;通常是当前数组长度的 1.5倍 (可…

Spring中经典的7种设计模式源码分析

一、工厂模式 Spring使用工厂模式来创建Bean对象,如BeanFactory、ApplicationContext等。工厂模式为bean的创建过程提供了一个框架,同时隔离了实例化细节,使得代码更加解耦。 BeanFactory接口 BeanFactory接口仍然是Spring工厂模式的基础,它定义了获取Bean实例的基本方法。 …

LAMP网站部署(Discuz论坛网站部署)

目录 mysql命令 语法 选项 参数 实例 安装php 安装Mariadb 关掉防火墙和selinux 启动HTTP服务 初始化数据库 查看数据库是否创建成功 修改HTTP的配置文件 浏览器打开 将以下所有目录都加上权限 最后首页效果 mysql命令 是MySQL数据库服务器的客户端工具&#xff0c;它工作在命…

【点云】激光点云建图评测

处理工具 Pcap合并软件 sudo apt install wireshark-common合并Pcap文件&#xff0c;路径为数据文件夹下&#xff0c; #mergecap -w <输出的新Pcap> <输入的Pcap> mergecap -w lidar_output.pcap slice2099-06-01/LIDAR/lidar.pcap slice2099-06-02/LIDAR/lidar…

Java错误:JDBC错误,如何解决和避免

随着Java的广泛应用&#xff0c;Java程序在连接数据库时经常会出现JDBC错误。JDBC&#xff08;Java Database Connectivity&#xff09;是Java中用于连接数据库的编程接口&#xff0c;因此&#xff0c;JDBC错误是在Java程序与数据库交互时遇到的一种错误。下面将介绍一些最常见…

从根到叶:深度理解哈希表

​​​​​​​ 一.哈希表的概念 关于查找元素时&#xff1a; 在顺序结构以及平衡树 中&#xff0c;元素关键码与其存储位置之间没有对应的关系&#xff0c;因此在 查找一个元素时&#xff0c;必须要经过关键 码的多次比较 。 顺序查找时间复杂度为 O(N) &#xff0c;平衡树中…

什么是云计算?应用场景有哪些?

云计算是通过互联网提供计算资源和服务的计算模式&#xff0c;是一种新型的计算模式&#xff0c;能够通过互联网将计算和存储资源进行集中和共享&#xff0c;云计算主要就是把有形的产品&#xff0c;如网络硬件设备、服务器、存储服务器和各种软件等转化成服务产品&#xff0c;…

Acwing-基础算法课笔记之动态规划(背包问题)

Acwing-基础算法课笔记之动态规划&#xff08;背包问题&#xff09; 一、01背包问题1、概述2、过程模拟 二、完全背包问题1、概述2、闫氏dp分析完全背包问题3、过程模拟代码模板 三、多重背包问题1、概述2、过程模拟3、多重背包问题的优化版本 分组背包问题1、概述2、过程模拟3…

postgresql 批量添加数据,存在则更新,不存在则插入

语句介绍: DO NOTHING&#xff1a;当记录存在时&#xff0c;什么都不做 DO UPDATE SET column_1 value_1, … WHERE condition&#xff1a;当记录存在时&#xff0c;更新表中的一些字段 实例语句&#xff1a; name默认为主键 存在则更新&#xff0c;不存在则插入 INSERT I…

Rockchip android7.1.2 强制第三方apk横屏显示

Rockchip android7.1.2 强制第三方apk横屏显示 问题描述解决方法 郑重声明:本人原创博文&#xff0c;都是实战&#xff0c;均经过实际项目验证出货的 转载请标明出处:攻城狮2015 Platform: Rockchip OS:Android 7.1.2 Kernel: 3.10 问题描述 目前市面上&#xff0c;apk有三种形…

修改vscode的相对路径计算逻辑

vscode的相对路径计算逻辑是&#xff0c;"./"表示当前项目的文件夹&#xff0c;而不是当前文件所在的文件夹 做出如下修改&#xff1a; File-->Preferences-->settings 搜索Execute in File Dir , 然后取消勾选

粒子群算法对pi控制器进行参数优化,随时优化pi参数以控制直流无刷电机转速。

粒子群算法对pi控制器进行参数优化&#xff0c;随时优化pi参数以取得设定直流无刷电机转速。 PSO优化PID&#xff0c;用于BLDC速度控制 仿真平台为&#xff1a;MATLAB 采用的是Simulinkm程序相配合 仿真结果以及程序示例&#xff1a;

如何配置Apache的反向代理

目录 前言 一、反向代理的工作原理 二、Apache反向代理的配置 1. 安装Apache和相关模块 2. 配置反向代理规则 3. 重启Apache服务器 三、常见的使用案例 1. 负载均衡 2. 缓存 3. SSL加密 总结 前言 随着Web应用程序的不断发展和扩展&#xff0c;需要处理大量的请求和…

Excel第26享:模糊查找之Hlookup函数与通配符的嵌套

1、需求描述 如下图所示&#xff0c;现第一行有三个参考值&#xff1a;人S、羊E、猪3&#xff0c;在第三行有5个字&#xff1a;马、牛、人、羊、猪&#xff0c;每个字如果出现在第一行的三个参考值中&#xff0c;就返回该单元格的数值。如&#xff0c;人&#xff0c;就返回“人…

Lucene查询语法,适用于 ELk Kibana 查询

Lucene查询语法&#xff0c;适用于 ELk Kibana 查询 Elasticsearch 构建在 Lucene 之上&#xff0c;过滤器语法和 Lucene 相同。本语法可用于 Kibana 界面的检索和 Grafana 看板对接 ES 的检索规则。 Kibana 上的检索语法Grafana 上的检索语法 全文搜索 在搜索栏输入login&…

【SpringCloud微服务实战08】RabbitMQ 消息队列

MQ异步通信优缺点: 优点: 吞吐量提升:无需等待订阅者处理完成,响应更快速 故障隔离:服务没有直接调用,不存在级联失败问题 调用间没有阻塞,不会造成无效的资源占用 耦合度极低,每个服务都可以灵活插拔,可替换 流量削峰:不管发布事件的流量波动多大,都由Broker接收,…