¿Puedo usar Win32 COM para reemplazar texto dentro de un documento de Word?

Tengo que realizar una gran cantidad de reemplazos en algunos documentos, y la cosa es que me gustaría poder automatizar esa tarea. Algunos de los documentos contienen cadenas comunes, y esto sería bastante útil si pudiera automatizarse. Por lo que leí hasta ahora, COM podría ser una forma de hacerlo, pero no sé si se admite la sustitución de texto. ¿Me gustaría poder realizar esta tarea en python? ¿Es posible? ¿Podría publicar un fragmento de código que muestre cómo acceder al texto del documento?

¡Gracias!

Vea si esto le da un comienzo en la automatización de palabras usando python.

Una vez que abra un documento, podría hacer lo siguiente.
Después del siguiente código, puede cerrar el documento y abrir otro.

Selection.Find.ClearFormatting Selection.Find.Replacement.ClearFormatting With Selection.Find .Text = "test" .Replacement.Text = "test2" .Forward = True .Wrap = wdFindContinue .Format = False .MatchCase = False .MatchWholeWord = False .MatchKashida = False .MatchDiacritics = False .MatchAlefHamza = False .MatchControl = False .MatchWildcards = False .MatchSoundsLike = False .MatchAllWordForms = False End With Selection.Find.Execute Replace:=wdReplaceAll 

El código anterior reemplaza el texto “prueba” con “prueba2” y hace “reemplazar todo”.
Puede convertir otras opciones en verdadero / falso según lo que necesite.

La forma sencilla de aprender esto es crear una macro con las acciones que desea realizar, ver el código generado y usarlo en su propio ejemplo (con / sin parámetros modificados).

EDITAR: Después de mirar un código de Matthew, podrías hacer lo siguiente

 MSWord.Documents.Open(filename) Selection = MSWord.Selection 

Y luego traduce el código VB anterior a Python.
Nota: el siguiente código de VB es una forma abreviada de asignar propiedades sin utilizar la syntax larga.

(VB)

 With Selection.Find .Text = "test" .Replacement.Text = "test2" End With 

Pitón

 find = Selection.Find find.Text = "test" find.Replacement.Text = "test2" 

Perdona mi conocimiento python. Pero, espero que tengas la idea de seguir adelante.
Recuerde hacer un Guardar y cerrar en un documento, una vez que haya terminado con la operación de buscar / reemplazar.

Al final, puede llamar a MSWord.Quit (para liberar el objeto de Word de la memoria).

Me gustan las respuestas hasta ahora;
Aquí hay un ejemplo probado (ligeramente modificado desde aquí )
que reemplaza todas las apariciones de una cadena en un documento de Word:

 import win32com.client def search_replace_all(word_file, find_str, replace_str): ''' replace all occurrences of `find_str` w/ `replace_str` in `word_file` ''' wdFindContinue = 1 wdReplaceAll = 2 # Dispatch() attempts to do a GetObject() before creating a new one. # DispatchEx() just creates a new one. app = win32com.client.DispatchEx("Word.Application") app.Visible = 0 app.DisplayAlerts = 0 app.Documents.Open(word_file) # expression.Execute(FindText, MatchCase, MatchWholeWord, # MatchWildcards, MatchSoundsLike, MatchAllWordForms, Forward, # Wrap, Format, ReplaceWith, Replace) app.Selection.Find.Execute(find_str, False, False, False, False, False, \ True, wdFindContinue, False, replace_str, wdReplaceAll) app.ActiveDocument.Close(SaveChanges=True) app.Quit() f = 'c:/path/to/my/word.doc' search_replace_all(f, 'string_to_be_replaced', 'replacement_str') 

Si esta publicación de la lista de correo es correcta, acceder al texto del documento es tan simple como:

 MSWord = win32com.client.Dispatch("Word.Application") MSWord.Visible = 0 MSWord.Documents.Open(filename) docText = MSWord.Documents[0].Content 

También vea Cómo buscar y reemplazar texto en documentos . Los ejemplos utilizan VB y C #, pero los conceptos básicos también deben aplicarse a Python.

Consulte este enlace: http://python.net/crew/pirx/spam7/

Los enlaces del lado izquierdo apuntan a la documentación.

Puede generalizar esto utilizando el modelo de objetos, que se encuentra aquí:

http://msdn.microsoft.com/en-us/library/kw65a0we(VS.80).aspx

También puede lograr esto utilizando VBScript . Simplemente escriba el código en un archivo llamado script.vbs , luego abra un símbolo del sistema (Inicio -> Ejecutar -> Cmd), luego cambie a la carpeta donde se encuentra el script y escriba:

 cscript script.vbs 

 strFolder = "C:\Files" Const wdFormatDocument = 0 'Select all files in strFolder strComputer = "." Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2") Set colFiles = objWMIService.ExecQuery _ ("ASSOCIATORS OF {Win32_Directory.Name='" & strFolder & "'} Where " _ & "ResultClass = CIM_DataFile") 'Start MS Word Set objWord = CreateObject("Word.Application") Const wdReplaceAll = 2 Const wdOrientLandscape = 1 For Each objFile in colFiles If objFile.Extension = "doc" Then strFile = strFolder & "\" & objFile.FileName & "." & objFile.Extension strNewFile = strFolder & "\" & objFile.FileName & ".doc" Wscript.Echo "Processing " & objFile.Name & "..." Set objDoc = objWord.Documents.Open(strFile) objDoc.PageSetup.Orientation = wdOrientLandscape 'Replace text - ^p in a string stands for new paragraph; ^m stands for page break Set objSelection = objWord.Selection objSelection.Find.Text = "String to replace" objSelection.Find.Forward = TRUE objSelection.Find.Replacement.Text = "New string" objSelection.Find.Execute ,,,,,,,,,,wdReplaceAll objDoc.SaveAs strNewFile, wdFormatDocument objDoc.Close Wscript.Echo "Ready" End If Next objWord.Quit