#python #winapi #ms-word #docx
Вопрос:
Хотите использовать win32 для сравнения нескольких документов word. Соглашение об именовании такое же, за исключением того, что в измененном документе есть test.docx добавлено в имя файла. Ниже приведен код, который у меня есть, но он содержит «pywintypes.com_error: (-2147023170,» Сбой удаленного вызова процедуры.», Нет, нет)». Есть какие-нибудь идеи о том, как я могу заставить это работать? У меня есть около 200 доков для сравнения, так что python, похоже, подходит для этого.
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]) != "~": #Locate the docx document and exclude temporary files file_root = path "\" file file_list.append(file_root) print("The directory found a total of {0} related files!".format(len(file_list))) return file_list def main(): modified_path = r"C:...ReplacedSWI\" original_path = r"C:...ReplacedSWI original\" for i, file in enumerate(get_docx_list(modified_path), start=1): print(f"{i}、Files in progress:{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()
Ответ №1:
Для тех, кто ищет решение для массового сравнения слов, ниже приведен код, который я успешно прогнал через несколько сотен документов. Удалите инструкции печати, как только вы отсортируете соглашение об именах.
import win32com.client import os def main(): #path directories modified_path = r"C:UsersAdminDesktopReplacedSOP- Plant and Equipment\" original_path = r"C:UsersAdminDesktopReplacedSOP - Plant and Equipment Original\" save_path = r"C:UsersAdminDesktopReplacedTEST\" file_list1 = os.listdir(r"C:UsersAdminDesktopReplacedSOP- Plant and Equipment\") file_list2 = os.listdir(r"C:UsersAdminDesktopReplacedSOP - Plant and Equipment Original\") #text counter Number = 0 #loop through files and compare for file in file_list1: for files in file_list2: #if files match do comparision, naming convention to be changed if files[:-5] " test.docx" == file: Number = 1 print(f"The program has completed {Number} of a total of {len(file_list1)} related files!") try: Application = win32com.client.gencache.EnsureDispatch("Word.Application") Application.CompareDocuments( Application.Documents.Open(modified_path file), Application.Documents.Open(str(original_path) files)) Application.ActiveDocument.ActiveWindow.View.Type = 3 Application.ActiveDocument.SaveAs(FileName=save_path files[:-5] " Comparison.docx") except: Application.Quit() pass if __name__ == '__main__': main()
Комментарии:
1. Как минимум, в ответе должно быть объяснено, в чем заключается проблема и как предлагаемое решение решает ее. Ответы типа «Попробуй это» обычно бесполезны.