2016-11-16 2 views
1

J'ai une tâche pour éditer une série de documents MSWord. Ce que je dois faire est de changer un mot au paragraphe 3 de chaque document. Je veux utiliser python pour terminer ce travail. Dans le document, il y a un tableau juste en dessous du paragraphe 3. Le problème est que si je change le mot du paragraphe 3, le paragraphe 3 va disparaître et les mots que j'ai remplis seront dans le tableau ci-dessous.Comment éditer des mots dans un paragraphe spécifique dans MSWord en utilisant win32com

Mon code est

import os 
import win32com 
from win32com.client import Dispatch 

w = win32com.client.Dispatch('Word Application') 
w.Visible = 1 
w.DisplayAlerts = 0 
doc = w.Documents.Open(u'F:\\pythonlearning\\a.doc') 

doc.Paragraphs(3).Range.Text = 'Y\n' 
+0

Faire 'print doc.Paragraphs (3) .Range.Text' peut aider à diagnostiquer ce qui se passe. – xidgel

+0

Vous avez raison. J'utilise "for paragraph in doc.Paragraphs" pour imprimer tout le document, et découvre que chaque paragraphe signifie un retour chariot. Donc, si je modifie le paragraphe (3), tout d'abord, la déclaration de transport du paragraphe (3) serait supprimée, et le tableau ci-dessous serait le paragraphe (3), c'est ce que je ne veux pas. –

Répondre

0

L'indexation commence probablement à 0 pour utiliser doc.Paragraphs (2) pour le troisième paragraphe.

+0

Oui, vous avez raison. –

0
import os 
import win32com 
from win32com.client import Dispatch 

w = win32com.client.Dispatch('Word Application') 
w.Visible = 1 
w.DisplayAlerts = 0 
doc = w.Documents.Open(u'F:\\pythonlearning\\a.doc') 
doc.Paragraphs(3).Range.InsertBefore ('Y\n') 
doc.Paragraphs(4).Range.Text = '' 

Cela peut fonctionner, mais ce n'est pas la meilleure solution.