xlwings 浏览器¶
此功能需要 xlwings PRO 和至少 v0.28.0 版本。
xlwings PRO 配备了一个超快速的 Excel 文件读取器。相比而言,pandas.read_excel()
,当你读取单个工作表时,你应该能够看到 5 到 25 倍之间的加速。确切的速度将取决于你的内容、文件格式和 Python 版本。以下是支持的 Excel 文件格式:
xlsx
/xlsm
/xlam
xlsb
xls
其他优点包括:
支持命名区域。
支持通过
myrange.expand()
或myrange.options(expand="table")
分别实现的动态区域。支持转换器,因此你可以不仅以 pandas DataFrame 的形式读取区域,还可以将其作为 NumPy 数组、列表、标量值、字典等读取。
你可以像字符串一样读取单元格错误,
#DIV/0!
或#N/A
而不是将它们全部转换为NaN
各种文件格式均支持日期时间转换,包括
xlsb
.
与经典的(“交互式”)需要安装 Excel 的 xlwings 使用方式不同,读取文件不依赖于 Excel 的安装,因此可以在 Python 运行的任何地方使用。然而,直接从文件读取要求工作簿在 xlwings 能够获取任何更改之前保存。
读取特定范围¶
若要以读取模式打开文件,请提供mode="r"
参数:xw.Book("myfile.xlsx", mode="r")
。通常建议将Book
用作上下文管理器,以便代码离开with
语句体后文件能自动关闭并清理资源:
import xlwings as xw
with xw.Book("myfile.xlsx", mode="r") as book:
sheet1 = book.sheets[0]
data = sheet1["A1:B2"].value
如果你不使用with
语句,请确保手动通过book.close()
.
读取整个工作表¶
若要读取整个工作表,请使用cells
属性访问底层对象:
with xw.Book("myfile.xlsx", mode="r") as book:
sheet1 = book.sheets[0]
data = sheet1.cells.value
转换器:数据帧等¶
你可以使用常规的转换器,例如以 DataFrame 的形式读取一个区域:
with xw.Book("myfile.xlsx", mode="r") as book:
sheet1 = book.sheets[0]
df = sheet1["A1:B2"].options("df").value
# As usual, you can also provide more options
df = sheet1["A1:B2"].options("df", index=False).value
更多详情,请参阅转换器和选项.
命名区域¶
可以这样访问命名区域:
with xw.Book("myfile.xlsx", mode="r") as book:
sheet1 = book.sheets[0]
data = sheet1["myname"].value # get values
address = sheet1["myname"].address # get address
或者,你也可以通过Names
集合访问它们:
with xw.Book("myfile.xlsx", mode="r") as book:
for name in book.names:
print(name.refers_to_range.value)
动态区域¶
你可以利用常规的区域扩展来读取动态大小的区域:
with xw.Book("myfile.xlsx", mode="r") as book:
sheet1 = book.sheets[0]
data = sheet1["A1"].expand().value
单元格错误¶
尽管 xlwings 默认将单元格错误(如#N/A
读取为None
,如果你特别查找这些错误,可以通过使用err_to_str
选项将其作为字符串读取:
with xw.Book("myfile.xlsx", mode="r") as book:
sheet1 = book.sheets[0]
data = sheet1["A1:B2"].option(err_to_str=True).value
限制¶
当前仅可通过
pip install xlwings
或通过conda-forge
conda 渠道获得,但尚未在官方 Anaconda 渠道上发布。动态区域:
myrange.expand()
当前效率低下,如果动态区域较大,将显著减慢读取速度。命名区域:目前具有工作表作用域的命名区域无法显示其正确名称。例如,
mybook.names[0].name
将显示名称mylocalname
而不是包含工作表名称的形式Sheet1!mylocalname
。类似地,names
属性只能通过book
对象访问,而不是通过sheet
对象访问。其他定义的名称(公式和常量)当前不受支持。Excel 表格:当前还不支持通过表格名称访问数据。
选项:除了
err_to_str
之外,非默认选项当前效率低下并将减慢读取操作。这包括dates
,empty
和numbers
.公式:当前仅支持单元格值,而不支持单元格公式。
这只是一个文件读取器,当前不支持写入文件。