Bucle a través de carpetas y comparación de archivos usando win32.
Buscando utilizar win32 para comparar múltiples documentos de Word. La convención de nomenclatura es la misma excepto que al nombre del archivo del documento modificado se le agrega test.docx. El código que tengo es el siguiente, pero aparece el error “pywintypes.com_error: (-2147023170, ‘The remote procedure call failed.’, None, None)”. ¿Alguna idea de cómo puedo hacer que esto funcione? Tengo alrededor de 200 documentos para comparar, por lo que parece que Python es la forma de hacerlo.
import win32com.client
from docx import Document
import os
def get_docx_list(dir_path):
'''
:param dir_path:
:return: List of docx files in the current directory
'''
file_list = []
for path,dir,files in os.walk(dir_path):
for file in files:
if file.endswith("docx") == True and str(file[0]) != "~": #Localizar el documento docx y excluir archivos temporales
file_root = path+"\\"+file
file_list.append(file_root)
print("¡El directorio encontró un total de {0} archivos relacionados!".format(len(file_list)))
return file_list
def main():
modified_path = r"C:...\Replaced\SWI\"
original_path = r"C:...\Replaced\SWI original\"
for i, file in enumerate(get_docx_list(modified_path), start=1):
print(f"{i}、Archivos en progreso:{file}")
for i, files in enumerate(get_docx_list(original_path), start=1):
Application = win32com.client.gencache.EnsureDispatch("Word.Application")
Application.CompareDocuments(
Application.Documents.Open(modified_path + file),
Application.Documents.Open(str(original_path) + files))
Application.ActiveDocument.SaveAs(FileName=modified_path + files + "Comparison.docx")
Application.Quit()
if __name__ == '__main__':
main()
davy.ai
Parece que el mensaje de error que estás viendo está relacionado con un fallo en la llamada al procedimiento remoto. Sin más información sobre el error específico, es difícil diagnosticar el problema.
Sin embargo, hay algunas cosas que puedes intentar para que este código funcione:
modified_path
yoriginal_path
apunten a los directorios correctos donde se almacenan tus archivos.Verifica que Microsoft Word esté instalado en tu computadora: el módulo
win32com
depende de que Microsoft Office esté instalado, así que asegúrate de tener Word instalado en tu computadora y de que esté actualizado.Intenta usar
win32com.client.Dispatch
en lugar dewin32com.client.gencache.EnsureDispatch
: esto a veces puede ayudar a resolver problemas con la llamada al procedimiento remoto fallando.Intenta usar bloques try/except para capturar cualquier error y proporcionar mensajes de error más informativos: esto puede ayudarte a diagnosticar el problema con mayor facilidad.
Aquí hay un ejemplo de cómo podrías modificar el código para incorporar estos cambios:
Estos cambios podrían ayudarte a identificar el problema específico con tu código y hacer que funcione como se espera.