您如何从OpenOffice Calc.ods文件中读取单元格值?
题
我已经能够使用列和行号作为输入读取XLRD的Excel单元格值。现在,我需要在某些以.ods格式保存的电子表格中访问相同的单元格值。
因此,例如,如何使用Python读取.ods文件中的单元格E10中存储的值?
解决方案
通过XML入侵 不应该 太难了...但是有并发症。只是一个例子:OOO以他们的智慧决定不明确编写单元格地址。没有类似的单元格属性 address="E10"
或者 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不同,该句子本质上是XML格式上方的抽象层。对于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 坠毁, ,odfpy 坠毁 此外,它的文档要么缺少或可怕。
鉴于据说有效的库死在我测试的第一个文件中,我希望避免写自己的处理,或者迟早会崩溃,或者在某些怪异的情况下默默失败的情况更糟。
编辑:情况变得更糟。 Ezodf可能 默默返回虚假数据.