Python操作Excel表格

news2024/10/7 10:20:15

本文介绍如何通过轻量级、零依赖(仅使用标准库)的 pylightxl 库操作Excel表格。

官网:Welcome to pylightxl documentation — pylightxl 2019 documentation

目录

一、入门

1. 读写CSV文件

2. 读Excel文件

3. 获取工作表和单元格数据

3.1 通过单元格地址 

3.2 通过单元格索引

3.3 通过单元格范围

3.4 获取整个行或列

3.5 通过行/列进行迭代

3.6 更新单元格的值

3.7 更新单元格公式

3.8 获取命名范围

3.9 基于键值获取行/列

4. 读取半结构化的数据

5. 将 pylightxl.Database 写入excel 文件

6. 将 Python 数据写入新的 Excel 文件

二、进阶


一、入门

1. 读写CSV文件

import pylightxl as xl

# 设置CSV文件路径
# 设置CSV文件的分隔符
# 设置默认工作表,将读入的CSV数据写入其中
db = xl.readcsv(fn='input.csv', delimiter='/', ws='sh2')

# 然后对其进行修改


# 现在把它写成csv文件;或者写成excel文件,见xl.writexl()。
xl.writecsv(db=db, fn='new.csv', ws=('sh2'), delimiter=',')

2. 读Excel文件

import pylightxl as xl

# readxl返回一个持有所有工作表及其数据的pylightxl数据库
db = xl.readxl(fn='folder1/folder2/excelfile.xlsx')

# pylightxl也支持pathlib
my_pathlib = pathlib.Path('folder1/folder2/excelfile.xlsx')
db = xl.readxl(my_pathlib)

# pylightxl也支持django用户的类文件对象。
with open('excelfile.xlsx', 'rb') as f:
    db = xl.readxl(f)

# 仅读取选择的工作表
db = xl.readxl(fn='folder1/folder2/excelfile.xlsx', ws=('Sheet1','Sheet3'))

# 返回所有工作表的名字
db.ws_names
>>> ['Sheet1', 'Sheet3']

3. 获取工作表和单元格数据

假设表格的数据内容如下图所示:

3.1 通过单元格地址 

# 访问指定单元格的数据
db.ws(ws='Sheet1').address(address='A1')
>>> 10
# 访问该单元格的公式(如果有的话)
db.ws(ws='Sheet1').address(address='A1', output='f')
>>> ''
# 访问该单元格的注释(如果有的话)
db.ws(ws='Sheet1').address(address='A1', output='c')
>>> 'this is a comment on cell A1!'
# 注意:空单元格的索引将返回一个空字符串。
db.ws(ws='Sheet1').address(address='A100')
>>> ''
# 默认的空值可以覆盖每个工作表。
db.ws(ws='Sheet1').set_emptycell(val=0)
db.ws(ws='Sheet1').address(address='A100')
>>> 0

3.2 通过单元格索引

# 访问指定单元格的数据
db.ws(ws='Sheet1').index(row=1, col=2)
>>> 20
# 访问该单元格的公式(如果有的话)
db.ws(ws='Sheet1').index(row=1, col=2, output='f')
>>> '=A1+10'
# 注意:空单元格的索引将返回一个空字符串。
db.ws(ws='Sheet1').index(row=100, col=1)
>>> ''
# 默认的空值可以覆盖每个工作表。
db.ws(ws='Sheet1').set_emptycell(val=0)
db.ws(ws='Sheet1').index(row=100, col=1)
>>> 0

3.3 通过单元格范围

db.ws(ws='Sheet1').range(address='A1')
>>> 10
# 获取指定范围的数据
db.ws(ws='Sheet1').range(address='A1:C2')
>>> [[10, 20, ''], ['', 30, 40]]
# 获取指定范围的公式
db.ws(ws='Sheet1').range(address='A1:B1', output='f')
>>> [['=10', '=A1+10']]
# 用指定值更新指定范围
db.ws(ws='Sheet1').update_range(address='A1:B1', val=10)

3.4 获取整个行或列

db.ws(ws='Sheet1').row(row=1)
>>> [10,20,'']

db.ws(ws='Sheet1').col(col=1)
>>> [10,'']

3.5 通过行/列进行迭代

for row in db.ws(ws='Sheet1').rows:
    print(row)

>>> [10,20,'']
>>> ['',30,40]

for col in db.ws(ws='Sheet1').cols:
    print(col)

>>> [10,'']
>>> [20,30]
>>> ['',40]

3.6 更新单元格的值

db.ws(ws='Sheet1').address(address='A1')
>>> 10
db.ws(ws='Sheet1').update_address(address='A1', val=100)
db.ws(ws='Sheet1').address(address='A1')
>>> 100

db.ws(ws='Sheet1').update_index(row=1, col=1, val=10)
db.ws(ws='Sheet1').index(row=1, col=1)
>>> 10

3.7 更新单元格公式

db.ws(ws='Sheet1').update_address(address='A1', val='=B1+100')
db.ws(ws='Sheet1').update_index(row=1, col=1, val='=B1+100')

3.8 获取命名范围

# 定义一个范围
db.add_nr(name='Table1', ws='Sheet1', address='A1:B2')
# 获取命名范围的数据
db.nr(name='Table1')
>>> [[10, 20], ['', 30]]
# 获取命名范围的位置
db.nr_loc(name='Table1')
>>> ['Sheet1','A1:B2']
# 更新命名范围的值
db.update_nr(name='Table1', val=10)
# 查看所有的命名范围
db.nr_names
>>> {'Table1': 'Sheet1!A1:B2'}
# 删除一个指定的范围
db.remove_nr(name='Table1')

3.9 基于键值获取行/列

# 假设我们想返回 “行=1, 单元格值=20” 的那一列
db.ws(ws='Sheet1').keycol(key=20, keyindex=1)
>>> [20,30]

# 我们还可以指定一个自定义的键索引(不仅仅是row=1),注意我们现在是根据row=2来匹配的。
db.ws(ws='Sheet1').keycol(key=30, keyindex=2)
>>> [20,30]

# 同样,对于keyindex=1的keyrow也是如此(寻找col=1中的匹配项)。
db.ws(ws='Sheet1').keyrow(key='', keyindex=1)
>>> ['',30,40]

4. 读取半结构化的数据

import pylightxl
db = pylightxl.readxl(fn='Book1.xlsx')

# 要求半结构化数据(SSD)输出
ssd = db.ws(ws='Sheet1').ssd(keycols="KEYCOLS", keyrows="KEYROWS")

ssd[0]
>>> {'keyrows': ['r1', 'r2', 'r3'], 'keycols': ['c1', 'c2', 'c3'], 'data': [[1, 2, 3], [4, '', 6], [7, 8, 9]]}
ssd[1]
>>> {'keyrows': ['rr1', 'rr2', 'rr3', 'rr4'], 'keycols': ['cc1', 'cc2', 'cc3'], 'data': [[10, 20, 30], [40, 50, 60], [70, 80, 90], [100, 110, 120]]}

5. 将 pylightxl.Database 写入excel 文件

Pylightxl支持写excel而不需要在机器上安装excel。然而,它也不是没有限制。写入器只支持单元格数据的写入(即:不支持图形、格式化、图像、宏等),仅仅是单元格中的字符串/数字/方程。

import pylightxl as xl

# 读取现有工作表并改变其单元格的值(与上述工作表相同)。
db = xl.readxl(fn='excelfile.xlsx')
# 覆盖现有的数字值
db.ws(ws='Sheet1').index(row=1, col=1)
>>> 10
db.ws(ws='Sheet1').update_index(row=1, col=1, val=100)
db.ws(ws='Sheet1').index(row=1, col=1)
>>> 100
# 写入文本
db.ws(ws='Sheet1').update_index(row=1, col=2, val='twenty')
# 写入方程
db.ws(ws='Sheet1').update_address(address='A3', val='=A1')

# 将db写入本地Excel文件
xl.writexl(db=db, fn='updated.xlsx')

6. 将 Python 数据写入新的 Excel 文件

import pylightxl as xl

# 以这个列表为例,作为我们的输入数据,我们想把它放在A列中
mydata = [10,20,30,40]

# 创建一个空白数据库
db = xl.Database()

# 在数据库中添加一个空白工作表
db.add_ws(ws="Sheet1")

# 循环将我们的数据添加到工作表中
for row_id, data in enumerate(mydata, start=1)
    db.ws(ws="Sheet1").update_index(row=row_id, col=1, val=data)

# 将db写入新的本地Excel文件
xl.writexl(db=db, fn="output.xlsx")

二、进阶

写在最后,除了pylightxl,还有其他很多库可以用于读写Excel文件,例如:xlrd,xlwd,OpenPyXl等

Excel 神器 —— OpenPyXl - 知乎

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

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

相关文章

前端css实现特殊日期网页变灰功能

前端变灰效果在网页实际使用过程中使用的比较少,但有时候又缺一不可,一般在大型哀悼日或纪念日的时候使用,使用后的网站页面会变成灰色(黑白色)。 我们先看下各大网站是怎么实现的: 1.csdn实现方式 2.淘宝 3.人民网 4.京东 5.掘…

Unity【Multiplayer 多人在线】服务端、客户端通用架构的使用指南

文章目录🚩 Import🚀 protogen使用方法🪐 客户端接口🌈 服务端接口🧭 数据处理🎨 Example🚩 Import 下载SKFramework框架,导入到Unity中; 在框架Package Manager中搜索并…

osgEarth示例分析——osgearth_colorfilter

前言 osgearth_colorfilter颜色过滤器示例。本示例中,主要展示了6种颜色过滤器的使用,分别是:HSLColorFilter、RGBColorFilter、CMYKColorFilter、BrightnessContrastColorFilter、GammaColorFilter、ChromaKeyColorFilter。 执行命令 // 一条命令是一…

Docker日常运维小技巧

一、故障定位 1、查看容器内部 https 请求响应时间 docker exec -t $(docker ps -f nameblog_web -q) curl -H X-Forwarded-Proto:https \-w %{time_total} -o /dev/null -s localhost 2、查看容器日志 docker logs --tail 50 --follow --timestamps mediawiki_web_1 3、删…

深圳SMT贴片行业MES系统解决方案~MES系统服务商~先达智控

随着我国工业的迅速发展,所有电子行业都离不开SMT贴片生产,SMT贴片生产是电子行业的至关重要的一道工业环节,我国作为一个工业制造大国,有着完备的SMT现代产业体系。SMT贴片领域是我国支柱性产业其一,SMT贴片产品涵盖工…

【JavaWeb开发-Servlet】day01-使用TomCat实现本地web部署

目录 1、准备java web开发环境 (1)下载javaJDK(推荐使用JDK1.8,企业常用且稳定) (2)下载TomCat服务器 2、创建web服务器TomCat (1)创建一个项目文件夹 (2)在文件夹中新建一个记事本并编以下…

算法大神左程云耗尽5年心血分享程序员代码面试指南第2版文档

前言 学习是一种基础性的能力。然而,“吾生也有涯,而知也无涯。”,如果学习不注意方法,则会“以有涯随无涯,殆矣”。 学习就像吃饭睡觉一样,是人的一种本能,人人都有学习的能力。我们在刚出生…

移动WEB开发之rem布局--苏宁首页案例制作(技术方案1)

案例:苏宁网移动端首页 访问地址:苏宁易购(Suning.com)-家电家装成套购,专注服务省心购! 1. 技术选型 方案:我们采取单独制作移动页面方案 技术:布局采取rem适配布局(less rem 媒体查询&am…

用 TensorFlow.js 在浏览器中训练一个计算机视觉模型(手写数字分类器)

文章目录Building a CNN in JavaScriptUsing Callbacks for VisualizationTraining with the MNIST DatasetRunning Inference on Images in TensorFlow.jsReferences我们在《在浏览器中运行 TensorFlow.js 来训练模型并给出预测结果(Iris 数据集)》中已…

数字源表如何测试MOS管?

MOSFET(金属—氧化物半导体场效应晶体管)是 一种利用电场效应来控制其电流大小的常见半导体器件,可 以 广 泛 应 用 在 模 拟 电 路 和 数 字 电 路 当 中 。 MOSFET可以由硅制作,也可以由石墨烯,碳纳米管 等材料制作,是材料及器件…

集成电路模拟版图入门-转行模拟版图基础学习笔记(二)

在众多IC岗位中,模拟版图确实属于容易入门,吸引来很多想要转行IC行业的朋友,但需要掌握的知识点和技巧并不比设计少,属于门槛简单,上手不易,想要自学模拟版图似乎比较困难。 之前为大家分享过移知学员的模…

(十四)笔记.net学习之RabbitMQ工作模式

RabbitMQ在.net中简单使用一、简单模式1.生产者2.消费者二、工作队列模式1.工作队列模式介绍2.生产者发送消息3.消费能力三、发布/订阅模式1.介绍2.生产者3.消费者四、Routing路由模式1.介绍2.生产着3.消费者五、topic 主题模式1.介绍2. 生产者3.消费者一、简单模式 1.生产者 …

MyBatis系列第1篇:MyBatis未出世之前我们那些痛苦的经历

这么多技术,为什么我们选择的是mybatis 不知道大家是否还记得使用jdbc如何操作数据库? 加载驱动、获取连接、拼接sql、执行sql、获取结果、解析结果、关闭数据库,这些操作是纯jdbc的方式必经的一些过程,每次操作数据库都需要写这…

三面:请设计一个虚拟DOM算法吧

一、问题剖析 这不是前几天面试官开局面试官就让我设计一个路由,二面过了,结果今天来个三面。 问你道简单的送分题:设计一个虚拟DOM算法? 好家伙,来吧,先进行问题剖析,谁让我们是卑微的打工人…

学习python基础知识

1、Python 基础语法 计算机组成:硬件、软件、计算机运行程序方式、Python 语言的特点、应用领域、Python IDE、程序注释:单行注释、多行注释;变量的作用、定义、 命名规则、变量的数据类型、查看变量类型、输入和输入函数、算术运算符、赋值…

gazebo中添加动态障碍物

文章目录gazebo 教程gazebo 添加动态障碍物gazebo添加动态障碍物插件gazebo中动态障碍物实时posegazebo 教程 gazebo github https://github.com/gazebosim/gazebo-classic/tree/gazebo9gazebo tutorials https://classic.gazebosim.org/tutorials运行一个空白环境 <sdf v…

深入了解Java中的SQL注入

深入了解Java中的SQL注入 本文以代码实例复现了Java中JDBC及Mybatis框架采用预编译和非预编译时可能存在SQL注入的几种情况&#xff0c;并给予修复建议。 JDBC 首先看第一段代码&#xff0c;使用了远古时期的JDBC并且并没有使用预编译。这种简单的字符串拼接就存在SQL注入 …

一云七芯!ZStack 祝贺上海市金融信创联合攻关基地荣获一等奖

2022年11月初&#xff0c;由上海市总工会、中共上海市经济和信息化工作委员会、上海市经济信息化委员会主办的2022上海城市数字化转型 “智慧工匠”选树、“领军先锋”评选活动信创应用竞赛决赛暨颁奖典礼中&#xff0c;“一云七芯适配验证云平台及服务解决方案”获得信创应用案…

GitHub2022年度前100的Java面试真题高频知识点汇总

前言 这是我在工作、面试中学习并总结到的一些知识点&#xff0c;都是一些比较典型的、面试常常被问到的问题。 如果你平时没有注意去总结的话&#xff0c;那么当你面试被问到的时候可能会是一脸懵圈&#xff0c;就算这个问题你知道怎么回事&#xff0c;但是你平时没有认真总…

【win11内存占用高优化】未运行程序,系统内存占用50以上

这里写自定义目录标题前言打开控制面板找到电源键功能找到快速启动选项&#xff0c;取消勾选&#xff0c;确定win X以管理员身份打开powershell输入如下命令&#xff0c;回车关闭终端完成前言 windows11在未运行任何其他程序的情况下&#xff0c;内存占用超50%&#xff0c;可…