如何从OpenOffice Calc.ods文件读取单元格的值?

2024-09-28 23:27:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经能够使用xlrd读取Excel单元格值,使用列和行号作为输入。现在我需要访问一些电子表格中以.ods格式保存的单元格值。在

例如,如何使用Python读取存储在.ods文件中的E10单元格中的值?在


Tags: 文件格式odsexcel电子表格行号xlrde10
2条回答

破解XML不应该太难。。。但也有一些并发症。举一个例子:OOo在他们的智慧下决定不显式地写单元格地址。没有像address="E10"column="E"这样的单元格属性;您需要对行和列进行计数。在

五个连续的空单元格用
<table:table-cell table:number-columns-repeated="5" />

number-colums-repeated属性默认为“1”,也适用于非空单元格。在

当您合并单元格时,情况会变得更糟;您将得到一个covered-table-cell标记,它与table-cell标记相同90%,并且属性number-columns-spanned和{}需要计算到列和行计数中。在

table:table-row标记可能具有number-rows-repeated属性。这可用于重复整个非空行的内容,但通常在有多个连续空行时出现。在

因此,即使您对“在我的数据上工作”的方法感到满意,这也不是小事。在

你可以看看ODFpy。注意第二句话:“与其他更方便的API不同,这个API本质上是XML格式之上的一个抽象层。”“有一个ODF到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的odscrashed,odfpycrashed,此外,它的文档要么丢失要么很糟糕。在

考虑到我测试的第一个文件中假定正在工作的库死机,我宁愿避免编写自己的处理程序,因为它迟早会崩溃,或者更糟的是,在某些更奇怪的情况下会默默地失败。在

编辑:情况变得更糟了。ezodf可以silently return bogus data。在

相关问题 更多 >