Come si può leggere il valore di una cella da un file di OpenOffice Calc .ods?

StackOverflow https://stackoverflow.com/questions/2740763

  •  02-10-2019
  •  | 
  •  

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?

È stato utile?

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 .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top