Tengo algunos documentos de Word, cada uno con unos cientos de páginas de datos científicos que incluyen:
- Fórmulas químicas (H2SO4 con todos los subíndices y superíndices adecuados)
- Números científicos (exponentes formateados con superíndices)
- Muchas ecuaciones matemáticas. Escrito usando el editor de ecuaciones matemáticas en Word.
El problema es que almacenar estos datos en Word no es eficiente para nosotros. Por eso queremos almacenar toda esta información en una base de datos (MySQL). Queremos convertir el formato a LaTex.
¿Hay alguna forma de recorrer en iteración todos los subíndices, superíndices y ecuaciones dentro de un documento de Word usando VBA?
Respuestas:
Sí hay. Sugeriría usar Powershell ya que maneja los archivos de Word bastante bien. Creo que seré la forma más fácil.
Más información sobre la automatización de Powershell vs Word aquí: http://www.simple-talk.com/dotnet/.net-tools/com-automation-of-office-applications-via-powershell/
He cavado un poco más profundo y encontré este script de PowerShell:
Guárdelo como .ps1 y comience con:
Guardará todo el archivo .doc del directorio especificado, como los archivos html. Así que tengo un archivo doc en el que tengo su H2SO4 con subíndices y después de la conversión de PowerShell, la salida es la siguiente:
Como puede ver, los subíndices tienen sus propias etiquetas en HTML, por lo que lo único que queda es analizar el archivo en bash o c ++ para cortar de cuerpo a cuerpo, cambiar a LATEX y eliminar el resto de etiquetas HTML después.
Así que he desarrollado un analizador en C ++ para buscar el subíndice HTML y reemplazarlo con el subíndice LATEX.
El código:
Para el archivo html:
El resultado es:
No es ideal, por supuesto, pero tratar es como una prueba de concepto.
fuente
Puede extraer el xml directamente de cualquier documento de Office que sea 2007+. Esto se hace de la siguiente manera:
word
subcarpeta y eldocument.xml
archivo. Eso debería contener todo el contenido del documento.Creé un documento de muestra, y en las etiquetas del cuerpo encontré esto (tenga en cuenta que rápidamente lo armé, por lo que el formato podría estar un poco apagado):
Parece que la
<w:t>
etiqueta es para texto,<w:rPr>
es la definición de la fuente y el<w:p>
es un nuevo párrafo.La palabra equivalente se ve así:
fuente
He estado buscando un enfoque diferente del que persigue mnmnc.
Mis intentos de guardar un documento de Word de prueba como HTML no fueron exitosos. En el pasado descubrí que el HTML generado por Office está tan lleno de paja que elegir los bits que desea es casi imposible. He encontrado que ese es el caso aquí. También he tenido un problema con las ecuaciones. Word guarda ecuaciones como imágenes. Para cada ecuación habrá dos imágenes, una con una extensión de WMZ y otra con una extensión de GIF. Si muestra el archivo html con Google Chrome, las ecuaciones se ven bien pero no maravillosas; la apariencia coincide con el archivo GIF cuando se muestra con una herramienta de visualización / edición de imágenes que puede manejar imágenes transparentes. Si muestra el archivo HTML con Internet Explorer, las ecuaciones se ven perfectas.
Información Adicional
Debería haber incluido esta información en la respuesta original.
Creé un pequeño documento de Word que guardé como HTML. Los tres paneles en la imagen a continuación muestran el documento original de Word, el documento Html como lo muestra Microsoft Internet Explorer y el documento Html como lo muestra Google Chrome.
Como se explicó anteriormente, la diferencia entre las imágenes de IE y Chrome es el resultado de que las ecuaciones se guardan dos veces, una en formato WMZ y otra en formato GIF. El HTML es demasiado grande para mostrar aquí.
El HTML creado por la macro es:
Que se muestra como:
No he intentado convertir las ecuaciones desde el kit de desarrollo de software MathType gratuito aparentemente incluye rutinas que se convierten a LaTex
El código es bastante básico, así que no hay muchos comentarios. Pregunte si algo no está claro. Nota: esta es una versión mejorada del código original.
fuente
La forma más sencilla de hacer esto es solo las siguientes líneas en VBA:
Esto encontrará todo el texto superíndice. Si desea hacer algo con él, simplemente insértelo en el método. Por ejemplo, para encontrar la palabra "super" en un superíndice y convertirla en uso "super encontrado":
fuente