Python pylightxl模块-操作入门教程

目录

1. 安装

1.1. 通过pypi安装

1.2. 通过GitHub安装

1.3. 使用Git克隆

1.4. 下载源文件

1.5. 复制源文件

2. 快速入门指南

2.1. 读写CSV文件

2.2. 读取Excel文件

 2.3. 访问工作表和单元格数据

2.3.1. 通过单元格地址访问

2.3.2. 通过单元格索引访问

2.3.3. 通过单元格区间访问

2.3.4. 获取整行或整列

2.3.5. 遍历行或列

2.3.6. 更新单元格的值

2.3.7. 更新单元格的公式

2.3.8. 获取命名范围

2.3.9. 基于键值获取行或列

2.4. 读取半结构化数据

 2.5. 将 pylightxl.Database 写为 excel 文件

2.6. 用Python的数据写一份全新的Excel文件


1. 安装

安装pylightxl有几种方法。其中最简单的下载方式就是通过pip。但是在某些环境下可能不允许从外部下载内容,因此我们可以简单地复制粘贴所需要的源代码来解决这一问题。

1.1. 通过pypi安装

通过Python模块安装器下载官方最新版:

pip install pylightxl

1.2. 通过GitHub安装

通过GitHub下载最新的主分支版本:

pip install git+https://github.com/PydPiper/pylightxl.git

1.3. 使用Git克隆

通过Git克隆下载:

git clone https://github.com/PydPiper/pylightxl.git

1.4. 下载源文件

从GitHub下载:https://github.com/PydPiper/pylightxl/archive/master.zip

1.5. 复制源文件

创建整个库的副本,用户可以将其直接复制到项目、虚拟环境或 python/lib/site-packages 文件夹中以供一般使用。

1) 创建pylightxl文件夹

2) 在pylightxl文件夹内创建如下文件:

pylightxl
    1- __init__.py
    2- pylightxl.py

3) 将对应的源代码写入文件:

        3.1)文件1:__init__.py

        3.2)文件2:pylightxl.py

2. 快速入门指南

2.1. 读写CSV文件

读取有内容的csv文件:

import pylightxl as xl

# 将 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.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']

 2.3. 访问工作表和单元格数据

下面的例子假定 excelfile.xlsx 包含了一个名为 Sheet1 的工作表且该工作表中有下列单元格内容:

ABC
11020
23040

2.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')
>>> '这是单元格A1的批注!'
# 标记空白单元格会返回一个空字符串
db.ws(ws='Sheet1').address(address='A100')
>>> ''
# 但是可以覆写每个工作表中的默认空值
db.ws(ws='Sheet1').set_emptycell(val=0)
db.ws(ws='Sheet1').address(address='A100')
>>> 0

2.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

2.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']]

2.3.4. 获取整行或整列

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

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

2.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]

2.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

2.3.7. 更新单元格的公式

与更新单元格值相同,但条目必须以等号“=”开头

注意:

更新单元格公式会清除先前读取的单元格值。在打开Excel文件之前,公式不会计算其单元格值。

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

2.3.8. 获取命名范围

# 定义一个命名范围
db.add_nr(name='Table1', ws='Sheet1', address='A1:B2')
# 查看所有存在的命名范围
db.nr_names
>>> {'Table1': 'Sheet1!A1:B2'}
# 获得命名范围的内容
db.nr(name='Table1')
>>> [[10, 20], ['', 30]]
# 删除一个命名范围
db.remove_nr(name='Table1')

2.3.9. 基于键值获取行或列

注意:需要注意键的数据类型

# 假定我们想要返回一列 that has a cell value = 20 in row=1
db.ws(ws='Sheet1').keycol(key=20, keyindex=1)
>>> [20,30]

# 我们也可以指定一个自定义的keyindex(不仅仅是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]

2.4. 读取半结构化数据

  • 请注意,ssd 函数将任意关键字参数作为 KEYROWS/KEYCOLS 标志
  • 阅读多个表格的方式与阅读一本书的方式相同。从左到右,然后向下
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]]}

 2.5. 将 pylightxl.Database 写为 excel 文件

Pylightxl支持在未安装Excel的机器上写Excel文件。但是它仍会受到限制。操作者只能进行单元格数据的写入(例如:不支持图表、格式、图片、宏等),只能在单元格中写入字符串、数字、公式。

需要注意的是,只有在用户使用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')

xl.writexl(db=db, fn='updated.xlsx')

2.6. 用Python的数据写一份全新的Excel文件

对于不是来自现有 excel 电子表格的新 python 数据。

import pylightxl as xl

# 以此列表为例作为我们想要放入列A的输入数据
mydata = [10,20,30,40]

# 创建空的db
db = xl.Database()

# 向db中添加一份空白工作表
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
xl.writexl(db=db, fn="output.xlsx")

(未完待续)

(英文原文链接:https://pylightxl.readthedocs.io/en/latest/

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值