Come si può leggere il valore di una cella da un file di OpenOffice Calc .ods?
Domanda
ho potuto leggere un valore di cella Excel con XLRD utilizzando numeri di riga e di colonna come ingressi. Ora ho bisogno di accedere agli stessi valori delle celle in alcuni fogli di calcolo che sono stati salvati in formato .ods.
Così, per esempio, come faccio a letto con Python il valore memorizzato nella cella E10 in un file .ods?
Soluzione
Hacking attraverso le XML non dovrebbero essere troppo difficile ... ma ci sono complicazioni. Solo un esempio: OOo nella loro saggezza ha deciso di non scrivere l'indirizzo della cella in modo esplicito. Non v'è alcun attributo cellulare come address="E10"
o column="E"
; è necessario contare righe e colonne.
cinque celle vuote consecutive sono rappresentate da
<table:table-cell table:number-columns-repeated="5" />
I valori predefiniti attributo number-colums-repeated
a "1" e vale anche per le celle non vuote.
C'è di peggio quando si dispone di celle unite; si ottiene un tag covered-table-cell
che è il 90% lo stesso del tag table-cell
, e gli attributi number-columns-spanned
e necessità number-rows-spanned
per essere capito in colonna e riga di conteggio.
Un tag table:table-row
può avere un attributo number-rows-repeated
. Questo può essere utilizzato per ripetere il contenuto di una riga intera non vuoto, ma è più spesso quando ci sono più di 1 consecutivi righe vuote.
Quindi, anche se si sarebbe soddisfatto con un "opere miei dati" l'approccio, non è banale.
È possibile, come sguardo a ODFpy . Si noti la seconda frase: "" "A differenza di altre API più conveniente, questo è essenzialmente un livello di astrazione appena sopra il formato XML." "" C'è uno script ODF-to-HTML che (se si è scritto per ODS così come per ODT) può essere hackable per ottenere quello che vuoi.
Se si preferisce un "opere sui dati quasi di tutti ed è supportato e ha un'interfaccia che si ha familiarità con" l'approccio, potrebbe essere necessario attendere fino a quando la funzionalità viene messo in xlrd
... ma questo non sta andando che accada presto.
Altri suggerimenti
Da librerie che ho provato ezodf è stato quello che ha funzionato.
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
schiantato , odfpy è caduto e in aggiunta la sua documentazione è mancante o orribile.
Dato che le biblioteche si suppone che lavorano morti sul primo file che ho provato io preferirei evitare di scrivere la mia trasformazione come prima o poi si potrebbe andare in crash o peggio o che cosa non riuscire in silenzio su qualche situazione più strana.
EDIT: C'è di peggio. ezodf può silenzio restituire i dati fasulli .