Comment lisez-vous la valeur d'une cellule à partir du fichier d'un OpenOffice Calc?

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

  •  02-10-2019
  •  | 
  •  

Question

J'ai pu lire une valeur de cellule Excel avec xlrd en utilisant des colonnes et numéros de ligne comme entrées. Maintenant, je dois accéder aux mêmes valeurs des cellules dans certaines feuilles de calcul qui ont été enregistrés au format .ods.

Ainsi, par exemple, comment pourrais-je lire avec Python la valeur stockée dans la cellule E10 dans un fichier .ods?

Était-ce utile?

La solution

Hacking votre chemin à travers le XML ne doivent pas trop dur ... mais il y a des complications. Juste un exemple: OOo dans leur sagesse, a décidé de ne pas écrire l'adresse de cellule explicitement. Il n'y a pas d'attribut de cellule comme address="E10" ou column="E"; vous devez compter les lignes et les colonnes.

Cinq cellules vides consécutives sont représentées par
<table:table-cell table:number-columns-repeated="5" />

Les valeurs par défaut de l'attribut de number-colums-repeated à « 1 » et est également valable pour les cellules non vides.

Il y a pire quand vous avez des cellules fusionnées; vous obtenez une étiquette de covered-table-cell qui est de 90% la même que la balise table-cell et les attributs number-columns-spanned et le besoin de number-rows-spanned à cernées dans la colonne et le comptage ligne.

Une balise table:table-row peut avoir un attribut number-rows-repeated. Cela peut être utilisé pour répéter le contenu d'une ligne entière non vide, mais est le plus souvent vu quand il y a plus de 1 lignes vides consécutives.

Donc, même si vous contenter d'une approche « sur mon données », ce n'est pas trivial.

Vous pouvez vous à regarder ODFpy . Notez la deuxième phrase: « » « Contrairement aux autres API plus pratique, celui-ci est essentiellement une couche d'abstraction juste au-dessus du format XML. » « » Il y a un script ODF à HTML qui (si elle est écrite pour les SAO ainsi que pour ODT) peut être piraté pour obtenir ce que vous voulez.

Si vous préférez un « travaille sur les données de presque tout le monde et est pris en charge et a une interface que vous êtes familier avec » l'approche, vous devrez peut-être attendre jusqu'à ce que la fonctionnalité est mise en xlrd ... mais cela ne va pas arriver bientôt.

Autres conseils

De bibliothèques que j'ai essayé ezodf est celui qui a travaillé.

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

ods écrasements, odfpy écrasé et en plus la documentation est manquante ou soit horrible.

Étant donné que les bibliothèques de travail soi-disant sont morts sur le premier fichier que je l'ai testé je préférerais éviter d'écrire mon propre traitement que tôt ou tard il serait soit tomber en panne ou pire que l'échec en silence sur une situation plus bizarre.

EDIT: Il y a pire. ezodf peut silencieusement retourner de données fausses.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top