17.使用读写包操作Excel文件:pyxlsb 包
一 pyxlsb 的介绍
.xlsb
是 Excel 的二进制文件格式,专为高效存储和快速读取设计。
pyxlsb
是一个专门用于读取 .xlsb
文件的 Python 库,但不支持写入。
二 如何使用
1.遍历 .xlsb
文件中的所有工作表,并打印每个工作表的行数和列数
import pyxlsb
import excel
with pyxlsb.open_workbook("xl/stores.xlsb") as book:
for sheet_name in book.sheets:
with book.get_sheet(sheet_name) as sheet:
dim = sheet.dimension
print(f"Sheet '{sheet_name}' has "f"{dim.h} rows and {dim.w} cols")
book.sheets:
返回一个工作簿中所有工作表的名称列表。
for sheet_name in book.sheets:遍历工作簿中的所有工作表名称。
book.get_sheet(sheet_name):
获取某个具体的工作表对象(通过名称)。
sheet.dimension:
获取工作表的维度,包括:dim.h
: 工作表的总行数。dim.w
: 工作表的总列数。
print():
打印每个工作表的名称以及其行数和列数。
2.读取特定工作表(如 "2019"
)中从 "B2"
开始的某些数据,并打印前两行
with pyxlsb.open_workbook("xl/stores.xlsb") as book:
with book.get_sheet("2019") as sheet:
data = excel.read(sheet, "B2")
print(data[:2]) # 打印前两行
with book.get_sheet("2019"):
通过工作表名称索引打开名为 "2019"
的工作表。
excel.read(sheet, "B2")
:使用 excel
模块(自定义模块)从指定单元格("B2"
)开始读取数据。返回一个列表的结构,保存读取到的值。
3.将以日期为格式的单元格中的值转换为 datetime 对象
pyxlsb
库在读取 .xlsb
文件时,无法直接识别和解析包含日期的单元格。它会将这些日期值作为原始的数值数据(例如浮点时间戳)返回。因此,用户需要手动将这些数值转换为 Python 的 datetime
对象。
from pyxlsb import convert_date
# 假设 data[1][3] 是从某个单元格读取到的日期值(数值格式)
converted_date = convert_date(data[1][3])
# 转换后得到的是一个 datetime 对象,例如:
# datetime.datetime(2018, 7, 20, 0, 0)
convert_date
是 pyxlsb
提供的一个实用函数,用于将以数字形式存储的日期值转换为 Python 的 datetime.datetime
对象。
data[1][3]
表示第二行第四列的值。如果这个单元格包含日期,那么它的值可能是一个浮点数,表示 Excel 内部的时间戳。
调用 convert_date(data[1][3])
会将这个浮点数转换为一个 datetime.datetime
对象。转换后可能得到 datetime.datetime(2018, 7, 20, 0, 0)
,这表示日期为 2018 年 7 月 20 日,时间为午夜(00:00)。
4.在使用版本低于 1.3 的 pandas 读取 xlsb 格式的文件时,需要显式地指定引擎
df = pd.read_excel("xl/stores.xlsb", engine="pyxlsb")