2010-12-11 77 views
2

Je viens de mettre en place un petit script pour une équipe d'utilisateurs qui recueille tous les fichiers PDF et DOC * dans un répertoire et les analyse pour les liens hypertexte. La section PDF fonctionne comme prévu, mais une différence entre le document Word que j'ai reçu pour la conception (texte brut) diffère des documents Word réels qu'ils utilisent (le texte est dans un élément TextBox).Comment accéder au texte de l'objet TextBox dans un document Word en utilisant Ruby WIN32OLE

J'ai remarqué que lorsque j'ai essayé de rassembler des phrases/mots à partir de ces nouveaux fichiers, tout ce que j'ai reçu était le texte pour l'image d'arrière-plan du fichier (normalement un caractère spécial).

J'ai parcouru l'API et j'ai essayé plusieurs méthodes listées dans ole_methods, mais je n'ai pas encore trouvé le moyen d'accéder au TextBox pour en extraire le texte requis. Je sais que je peux convertir les fichiers Word en PDF et les raccourcir de cette façon (testés et éprouvés), mais cela implique une gestion de fichiers que je voudrais éviter à la place de la solution la plus simple: l'accès le texte.

Vous pouvez répliquer l'élément dans un document à l'aide de la fonction Dessiner une zone de texte (Word 2007+).

Est-ce que quelqu'un sait comment accéder à cet élément, ou mieux encore trouver TOUS les textes dans le document quel que soit l'élément dans lequel il se trouve?

require 'win32ole' 
word = WIN32OLE.new('Word.Application') 
doc = word.Documents.Open(file) 
doc.Sentences.each { |x| puts x.text } 
  • Adam

Répondre

3

En supposant que quelque chose d'équivalent à doc.Sentences.each { |x| puts x.text } mais pour textboxes nous contenterons donc cela devrait fonctionner pour vous:

doc.Shapes.each do |x| 
    puts x.TextFrame.TextRange.text 
end 

Il semble un peu messier que la façon dont vous avez parcouru les phrases, mais le x.TextFrame.TextRange.text renverra le texte réel contenu dans les zones de texte.

+0

Ça a marché, merci! doc.Shapes.each {| s | met s.TextFrame.TextRange.text} –

+0

@adam content que ça a marché! –