我已经能够使用 xlrd 使用列号和行号作为输入来读取 Excel 单元格值。现在我需要访问一些以 .ods 格式保存的电子表格中的相同单元格值。
例如,我将如何使用 Python 读取 .ods 文件中单元格 E10 中存储的值?
通过 XML 破解你的方式应该不会太难......但有一些复杂性。举个例子:OOo 在他们的智慧中决定不明确地写出单元地址。没有类似address="E10"
or的单元格属性column="E"
;您需要计算行数和列数。
五个连续的空单元格表示为
<table:table-cell table:number-columns-repeated="5" />
该number-colums-repeated
属性默认为“1”,也适用于非空单元格。
合并单元格时会变得更糟;你会得到一个标签,它与标签和属性covered-table-cell
90% 相同,需要计算列和行计数。table-cell
number-columns-spanned
number-rows-spanned
一个table:table-row
标签可能有一个number-rows-repeated
属性。这可用于重复整个非空行的内容,但在有超过 1 个连续的空行时最常见。
因此,即使您对“处理我的数据”方法感到满意,这也不是微不足道的。
您可能想看看ODFpy。注意第二句:“”“与其他更方便的 API 不同,这个 API 本质上是 XML 格式之上的一个抽象层。”“”有一个 ODF-to-HTML 脚本(如果它是为 ODS 和对于 ODT)可能可以得到你想要的东西。
如果您更喜欢“适用于几乎每个人的数据并受到支持并具有您熟悉的界面”的方法,您可能需要等到功能被放入xlrd
......但这不会很快发生。
从我尝试过的库中,ezodf是有效的。
from ezodf import opendoc, Sheet
doc = opendoc('test.ods')
for sheet in doc.sheets:
print sheet.name
cell = sheet['E10']
print cell.value
print cell.value_type
pyexcel-ods crashed, odfpy crashed,此外,它的文档要么丢失,要么很糟糕。
鉴于所谓的工作库在我测试的第一个文件上死了,我宁愿避免编写我自己的处理,因为它迟早会崩溃,或者更糟糕的是在一些更奇怪的情况下静默失败。
编辑:它变得更糟。ezdf 可能会默默地返回虚假数据。