J'ai quelques documents Word, contenant chacun quelques centaines de pages de données scientifiques qui comprennent:
- Formules chimiques (H2SO4 avec tous les indices et exposants appropriés)
- Numéros scientifiques (exposants formatés à l'aide d'exposants)
- Beaucoup d'équations mathématiques. Écrit à l'aide de l'éditeur d'équations mathématiques dans Word.
Le problème est que le stockage de ces données dans Word n'est pas efficace pour nous. Nous voulons donc stocker toutes ces informations dans une base de données (MySQL). Nous voulons convertir le formatage en LaTex.
Existe-t-il un moyen de parcourir tous les sous-indices, exposants et équations d'un document Word à l'aide de VBA?
microsoft-word
microsoft-word-2007
vba
les griffes
la source
la source
Réponses:
Oui il y a. Je suggérerais d'utiliser Powershell car il gère assez bien les fichiers Word. Je pense que je serai le moyen le plus simple.
Plus d'informations sur Powershell vs Word Automation ici: http://www.simple-talk.com/dotnet/.net-tools/com-automation-of-office-applications-via-powershell/
J'ai creusé un peu plus et j'ai trouvé ce script PowerShell:
Enregistrez-le sous .ps1 et démarrez-le avec:
Il enregistrera tous les fichiers .doc du répertoire spécifié, en tant que fichiers html. J'ai donc un fichier doc dans lequel j'ai votre H2SO4 avec des indices et après la conversion powershell, la sortie est la suivante:
Comme vous pouvez le voir, les indices ont leurs propres balises en HTML, donc il ne reste plus qu'à analyser le fichier en bash ou c ++ pour couper de corps en / corps, changer en LATEX et supprimer le reste des balises HTML par la suite.
J'ai donc développé un analyseur en C ++ pour rechercher un indice HTML et le remplacer par un indice LATEX.
Le code:
Pour le fichier html:
La sortie est:
Ce n'est pas idéal, bien sûr, mais le traitement est une preuve de concept.
la source
Vous pouvez extraire le xml directement à partir de n'importe quel document Office 2007+. Cela se fait de la manière suivante:
word
dossier et ledocument.xml
fichier. Cela devrait contenir tout le contenu du document.J'ai créé un exemple de document, et dans les balises body, j'ai trouvé ceci (notez que je l'ai rapidement mis ensemble, donc la mise en forme peut être un peu décalée):
Il apparaît que la
<w:t>
balise est pour le texte<w:rPr>
est la définition de la police et<w:p>
est un nouveau paragraphe.Le mot équivalent ressemble à ceci:
la source
J'ai cherché une approche différente de celle suivie par mnmnc.
Mes tentatives pour enregistrer un document Word de test au format HTML n'ont pas été un succès. J'ai découvert dans le passé que le code HTML généré par Office est si plein de paillettes que sélectionner les bits que vous voulez est presque impossible. J'ai trouvé que c'était le cas ici. J'ai également eu un problème avec les équations. Word enregistre les équations sous forme d'images. Pour chaque équation, il y aura deux images une avec une extension de WMZ et une avec une extension de GIF. Si vous affichez le fichier html avec Google Chrome, les équations semblent OK mais pas merveilleuses; l'apparence correspond au fichier GIF lorsqu'il est affiché avec un outil d'affichage / d'édition d'image qui peut gérer des images transparentes. Si vous affichez le fichier HTML avec Internet Explorer, les équations semblent parfaites.
Information additionnelle
J'aurais dû inclure ces informations dans la réponse d'origine.
J'ai créé un petit document Word que j'ai enregistré en Html. Les trois panneaux de l'image ci-dessous montrent le document Word d'origine, le document Html affiché par Microsoft Internet Explorer et le document Html affiché par Google Chrome.
Comme expliqué précédemment, la différence entre les images IE et Chrome résulte du fait que les équations sont enregistrées deux fois, une fois au format WMZ et une fois au format GIF. Le HTML est trop grand pour être affiché ici.
Le code HTML créé par la macro est:
Qui s'affiche comme:
Je n'ai pas tenté de convertir les équations car le kit de développement logiciel gratuit MathType comprend apparemment des routines qui se convertissent en LaTex
Le code est assez basique donc pas beaucoup de commentaires. Demandez si quelque chose n'est pas clair. Remarque: il s'agit d'une version améliorée du code d'origine.
la source
La façon la plus simple de le faire est simplement les lignes suivantes dans VBA:
Cela trouvera tout le texte en exposant. Si vous voulez en faire quelque chose, insérez-le simplement dans la méthode. Par exemple, pour trouver le mot "super" dans un exposant et le transformer en "super trouvé", utilisez:
la source