Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 6, 2012 20:07:15

svas
От:
Зарегистрирован: 2010-01-27
Сообщения: 239
Репутация: +  9  -
Профиль   Отправить e-mail  

IronPython, работа с Word

Не работат такой код

import sys
import clr
import System
from System import DateTime

clr.AddReference("Microsoft.Office.Interop.Word")
import Microsoft.Office.Interop.Word as Word

def doc_replace_text(source_filename, tokens, values, destination_filename):

missing = System.Type.Missing
replaceAll = Word.WdReplace.wdReplaceAll

word_application = Word.ApplicationClass()
word_application.visible = False

document = word_application.Documents.Open(source_filename)

for i in range(len(tokens)):
for r in document.StoryRanges:
#print "i = %d, tokens[i] = %s, values[i] = %s" % (i, tokens[i], values[i])
r.Find.Text = tokens[i]
r.Find.Replacement.Text = values[i]
r.Find.Wrap = Word.WdFindWrap.wdFindContinue
r.Find.Execute(missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, replaceAll, missing, missing, missing, missing)

document.SaveAs(destination_filename)
document.Close()
document = None

word_application.Quit()
word_application = None


source_filename = "C:\\tmp\\src.doc"
destination_filename = "C:\\tmp\\dst.doc"

tokens = ["[T1]"]
values = ['q']

doc_replace_text(source_filename, tokens, values, destination_filename)
Пример брал здесь
https://gist.github.com/1049552

В файле src.doc должно поменяться на q.
Код отрабатывает без ошибок, но в dst.doc - точная копия src.doc.
Windows 7 x86, Office 2007, IronPython 2.7.3
В чем может быть проблема?



Офлайн

#2 Авг. 7, 2012 08:35:39

svas
От:
Зарегистрирован: 2010-01-27
Сообщения: 239
Репутация: +  9  -
Профиль   Отправить e-mail  

IronPython, работа с Word

Это уже CPython. Тоже не работает.

import win32com.client

app = win32com.client.Dispatch("Word.Application")
app.Visible = False

doc = app.Documents.Open("c:\\tmp\\src.doc")
find = doc.Content.Find
find.Execute(Forward=True, Replace=1, FindText='T1', ReplaceWith='HAHAHAHAHA!')
doc.SaveAs("c:\\tmp\\dst.doc")
doc.Close()
doc = None
app.Quit()
app = None



Офлайн

#3 Авг. 7, 2012 09:13:47

svas
От:
Зарегистрирован: 2010-01-27
Сообщения: 239
Репутация: +  9  -
Профиль   Отправить e-mail  

IronPython, работа с Word

Ну может все таки кто-нибудь сталкивался с подобной проблемой или подскажите рабочий код, который ищет и меняет содержимое в документе Word. На всякий случай прикрепил файл, с которым код не работает.



Прикреплённый файлы:
attachment src.doc (25,5 KБ)

Офлайн

#4 Дек. 25, 2012 14:03:35

ave
От:
Зарегистрирован: 2011-02-28
Сообщения: 1
Репутация: +  0  -
Профиль   Отправить e-mail  

IronPython, работа с Word

У меня работает :)

def doc_replace_text(file_in, file_out, find, replace):
    import win32com.client as win32
    
    app = win32.Dispatch("Word.Application")
    app.Visible = True
    wdFindContinue = 1
    wdReplaceAll = 2
        
    app.Documents.Open(file_in)
    for i in range(len(find)):
        app.Selection.Find.Execute(find[i], False, False, False, False, False,True,\
                                   wdFindContinue, False, replace[i], wdReplaceAll)
    app.ActiveDocument.SaveAs(file_out)



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version