2017-06-13 1 views
0

J'essaie de parcourir un document Word et de trouver quelques tables spécifiques parmi plusieurs tables. Je sais comment parcourir toutes les tables en utilisant la bibliothèque docx ou win32, trouvé here. Cependant, j'ai besoin d'accéder à quelques tables spécifiques, pas toutes.Comment obtenir une table spécifique à partir de Word Doc en utilisant win32 COM?

Ces tableaux ont des en-têtes, au format Table A.x.x-x Insert table summary. Ce sont des en-têtes de texte au-dessus des tables, pas dans les tableaux eux-mêmes. Ceux-ci ne s'affichent pas lorsque j'utilise doc.ListParagraphs de win32, par conséquent, je ne parviens pas à parcourir correctement les tables de cette manière.

Je connais le nom de la table à laquelle j'ai besoin d'accéder. Il y a un texte sans rapport dans tout le document. Il n'y a pas de similarité générale dans les tableaux que j'ai besoin de trouver, donc je ne peux pas juste chercher une valeur spécifique dans une certaine cellule ou quelque chose comme ça.

Est-ce que quelqu'un a des suggestions sur la façon d'aborder cela? De préférence en utilisant win32 COM, mais je suis ouvert à toutes les solutions.

+0

Les en-têtes font-elles partie de la table actuelle ou sont-elles des «en-têtes» séparés de la table? – scanny

+0

Ils dirigent des paragraphes séparés de la table, directement au-dessus –

Répondre

0

j'ai compris une réponse, en utilisant this discussion. Merci pour la clarification sur quelle fonction COM win32 à utiliser! De la discussion, j'ai utilisé le code pour iter_block_items.

J'ai également fait une liste de tous les titres de table des titres que je voulais, appelés listOfTables. J'ai ensuite utilisé le code suivant, qui génère un dictionnaire, les clés étant le titre des tables et les valeurs étant les tables elles-mêmes.

dox = docx.Document(path) count = False tables = {} for item in iter_block_items(dox): try: title = item.text if title in listOfTables: count = True except: if count == True: tables[str(title)] = item count = False print tables

Si elle est sur une table, nous allons à l'exception de cas, car une table n'a pas d'attribut « texte ». Ensuite, si count est vrai, alias si le paragraphe précédent contenait un titre de table, alors stockez le titre et la table elle-même dans un dictionnaire. Cela va coupler les titres avec les tables appropriées, et j'aurai un accès facile à la table dont j'ai besoin.

0

Je pense que la collection que vous cherchez est doc.Paragraphs.

doc.ListParagraphs renvoie uniquement les paragraphes qui ont une mise en forme de liste, comme les puces ou les nombres.

Il y a d'autres défis à relever, mais c'est le premier mystère résolu :) Je crois