read instalar font add_picture python vba ms-word word-vba pywin32

python - instalar - Extrayendo datos de MS Word



read word file in python (6)

¿Qué tal si guardas el archivo como xml? luego usando Python u otra cosa y extrae los datos de la palabra y los ingresa en la base de datos.

Estoy buscando una manera de extraer / raspar datos de archivos de Word en una base de datos. Nuestros procedimientos corporativos tienen minutos de reuniones con clientes documentados en archivos de MS Word, principalmente debido a la historia y la inercia.

Quiero ser capaz de extraer los elementos de acción de estos minutos de reunión en una base de datos para que podamos acceder a ellos desde una interfaz web, convertirlos en tareas y actualizarlos a medida que se completan.

Cuál es la mejor manera de hacer esto:

  1. ¿Macro de VBA desde dentro de Word para crear CSV y luego subirlo al DB?
  2. Macro de VBA en Word con conexión a DB (¿cómo se conecta uno a MySQL desde VBA?)
  3. La secuencia de comandos de Python a través de win32com luego se carga a DB?

El último es atractivo para mí ya que la interfaz web se está construyendo con Django, pero nunca he usado win32com o intenté escribir Word desde Python.

EDITAR: Empecé a extraer el texto con VBA porque hace que sea un poco más fácil tratar con el Modelo de objetos de Word. Aunque estoy teniendo un problema: todo el texto está en tablas, y cuando saco las cuerdas de las CELDAS que quiero, obtengo un extraño carácter de caja al final de cada cuerda. Mi código se ve así:

sFile = "D:/temp/output.txt" fnum = FreeFile Open sFile For Output As #fnum num_rows = Application.ActiveDocument.Tables(2).Rows.Count For n = 1 To num_rows Descr = Application.ActiveDocument.Tables(2).Cell(n, 2).Range.Text Assign = Application.ActiveDocument.Tables(2).Cell(n, 3).Range.Text Target = Application.ActiveDocument.Tables(2).Cell(n, 4).Range.Text If Target = "" Then ExportText = "" Else ExportText = Descr & Chr(44) & Assign & Chr(44) & _ Target & Chr(13) & Chr(10) Print #fnum, ExportText End If Next n Close #fnum

¿Qué pasa con la pequeña caja de caracteres de control? ¿Algún tipo de código de carácter viene de Word?


Bueno, nunca he escrito Word, pero es bastante fácil hacer cosas simples con win32com. Algo como:

from win32com.client import Dispatch word = Dispatch(''Word.Application'') doc = word.Open(''d://stuff//myfile.doc'') doc.SaveAs(FileName=''d://stuff//text//myfile.txt'', FileFormat=?) # not sure what to use for ?

Esto no se ha probado, pero creo que algo así simplemente abrirá el archivo y lo guardará como texto sin formato (siempre que pueda encontrar el formato de archivo correcto); podría leer el texto en python y manipularlo desde allí. Probablemente haya una manera de tomar el contenido del archivo directamente, también, pero no lo sé; la documentación puede ser difícil de encontrar, pero si tienes documentos o experiencia de VBA, deberías ser capaz de transmitirlos.

Echa un vistazo a esta publicación de hace un tiempo: http://mail.python.org/pipermail/python-list/2002-October/168785.html Desplázate hacia abajo hasta COMTools.py; hay algunos buenos ejemplos allí.

También puede ejecutar makepy.py (parte de la distribución pythonwin) para generar python "firmas" para las funciones COM disponibles, y luego mirar a través de él como un tipo de documentación.


Es posible guardar mediante programación un documento de Word como HTML e importar las tablas contenidas en Access. Esto requiere muy poco esfuerzo.


Podrías usar OpenOffice. Puede abrir archivos de palabras, y también puede ejecutar macros de Python.


Word tiene un pequeño marcador que pone al final de cada celda de texto en una tabla.

Se usa como un marcador de final de párrafo en párrafos: para almacenar el formato de todo el párrafo.

Simplemente use la función Izquierda () para quitarla, es decir,

Left(Target, Len(Target)-1))

Por cierto, en lugar de

num_rows = Application.ActiveDocument.Tables(2).Rows.Count For n = 1 To num_rows Descr = Application.ActiveDocument.Tables(2).Cell(n, 2).Range.Text

Prueba esto:

For Each row in Application.ActiveDocument.Tables(2).Rows Descr = row.Cells(2).Range.Text


Diría que miren las preguntas relacionadas a la derecha -> La de arriba parece tener algunas buenas ideas para seguir la ruta de Python.