Войти

Показать полную графическую версию : [решено] Замена текста во всех файлах Word


RiskSoft
19-04-2012, 21:11
Не работает replace не пойму в чем проблема :(

Dim FSO, files, NameFile

Dim objWord, objDoc

Dim objSelection, myRange

Set FSO = CreateObject("Scripting.FileSystemObject")

Set objWord = CreateObject("Word.Application")
objWord.DisplayAlerts = True

Set files = FSO.GetFolder("D:\_Doc\").Files

For Each NameFile In files

if LCase(right(NameFile.Name,3))="doc" then

'MsgBox(NameFile)

Set objDoc = objWord.Documents.Open("D:\_Doc\"&NameFile.Name)
objWord.Visible = True


Set myRange = objDoc.Content
myRange.Find.Execute "+", False, False, False, False, False, True, wdFindContinue, False, "*", wdReplaceAll, False, False, False, False



'Set objSelection = objWord.Selection

'objSelection.Find.Text = "+"
'objSelection.Find.Forward = True
'objSelection.Find.MatchWholeWord = True
'objSelection.Find.Replacement.Text = "*"
'objSelection.Find.Execute ,,,,,,,,,,wdReplaceAll

MsgBox(NameFile)

objDoc.SaveAs("D:\_Doc\"&"_"&NameFile.Name)
objDoc.Close

Set objSelection = Nothing

end if

Next

Set files = Nothing
Set FSO = Nothing

objWord.Quit

Iska
19-04-2012, 22:26
RiskSoft, как-то так:
Option Explicit

Const wdFindContinue = 1
Const wdReplaceAll = 2

Dim objFSO
Dim objFile

Dim objWord
Dim objDocument

Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
Set objWord = WScript.CreateObject("Word.Application")

objWord.Visible = False
objWord.DisplayAlerts = False

With objFSO
For Each objFile In .GetFolder("D:\_DocIn").Files
If UCase(.GetExtensionName(objFile.Name)) = UCase("doc") Then
Set objDocument = objWord.Documents.Open(objFile.Path)

WScript.Echo objFile.Name, objDocument.Content.Find.Execute("+", False, False, False, False, False, True, wdFindContinue, False, "*", wdReplaceAll)

objDocument.SaveAs .BuildPath("D:\_DocOut", objFile.Name)
objDocument.Close
End if
Next
End With

objWord.Quit

Set objWord = Nothing
Set objFSO = Nothing

WScript.Quit 0

А какова общая цель?

RiskSoft
20-04-2012, 10:15
Общая цель такова:

1. Найти в папке все файлы Word.
2. В каждом файле заменить слово "за май" на "за апрель"
3. Сохранить файл

Iska
20-04-2012, 10:58
3. Сохранить файл »
Ранее, в приведённом Вами скрипте, документ сохранялся в той же папке под другим именем. Мы же будем:

1. Сохранять документ под тем же именем.
2. Только тогда, когда были сделаны замены.

Так?

RiskSoft
20-04-2012, 11:08
Гениально !!! Все работает, я в таком восторге :)) На что раньше уходило день, теперь все решается за пару минут.


WScript.Echo objFile.Name, objDocument.Content.Find.Execute("Счет № 1/", False, False, False, False, False, True, wdFindContinue, False, "Счет № 4/", wdReplaceAll)
WScript.Echo objFile.Name, objDocument.Content.Find.Execute("«31» января 2012 г.", False, False, False, False, False, True, wdFindContinue, False, "«30» апреля 2012 г.", wdReplaceAll)
WScript.Echo objFile.Name, objDocument.Content.Find.Execute("за январь 2012 г.", False, False, False, False, False, True, wdFindContinue, False, "за апрель 2012 г.", wdReplaceAll)

А можно еще переделать скрипт, чтобы не было MsgBox о произведенной замене.
И автоматом еще отправить измененный документ на печать весь документы и определенные страницы.

Iska
20-04-2012, 12:22
А можно еще переделать скрипт, чтобы не было MsgBox о произведенной замене. »
Можно. Запускайте из командной строки как:
cscript.exe //nologo "<Путь к скрипту>"

И автоматом еще отправить измененный документ на печать весь документы и определенные страницы. »
Прочтите ещё раз то, что Вы написали. Я не смог уяснить для себя с смысл данного предложения.

И что Вы скажете по поводу моего вопроса выше (http://forum.oszone.net/post-1903040.html#post1903040)?

RiskSoft
20-04-2012, 15:58
По пункту 1, ответ: ДА
По пункту 2, ответ: ДА

Все верно и все правильно сделано!

По поводу печати, мне хочется знать как вывести на печать файл Word. Но проблема заключается в том что мне нужно вывести не весь документ, а скажем лист 2 и сделать 3 копии этого листа.

Iska
20-04-2012, 20:03
По пункту 1, ответ: ДА
По пункту 2, ответ: ДА »
Тогда примерно так:
Option Explicit

Const wdFindContinue = 1
Const wdReplaceAll = 2

Dim objFSO
Dim objFile

Dim objWord
Dim objDocument

Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
Set objWord = WScript.CreateObject("Word.Application")

With objWord
.Visible = False
.DisplayAlerts = False

For Each objFile In objFSO.GetFolder("D:\_Doc").Files
If UCase(objFSO.GetExtensionName(objFile.Name)) = UCase("doc") Then
With .Documents.Open(objFile.Path)
If .Content.Find.Execute( _
"+", False, False, False, False, False, True, wdFindContinue, False, "*", wdReplaceAll _
) Then
WScript.Echo objFile.Name, vbTab, "Ok"

.Save
Else
WScript.Echo objFile.Name, vbTab, "Not found"
End If

.Close
End With
End if
Next

.Quit
End With

Set objWord = Nothing
Set objFSO = Nothing

WScript.Quit 0

WScript.Echo objFile.Name, objDocument.Content.Find.Execute("Счет № 1/", False, False, False, False, False, True, wdFindContinue, False, "Счет № 4/", wdReplaceAll)
WScript.Echo objFile.Name, objDocument.Content.Find.Execute("«31» января 2012 г.", False, False, False, False, False, True, wdFindContinue, False, "«30» апреля 2012 г.", wdReplaceAll)
WScript.Echo objFile.Name, objDocument.Content.Find.Execute("за январь 2012 г.", False, False, False, False, False, True, wdFindContinue, False, "за апрель 2012 г.", wdReplaceAll) »
Вам нужно в каждом документе делать множественные замены?

По поводу печати, мне хочется знать как вывести на печать файл Word. Но проблема заключается в том что мне нужно вывести не весь документ, а скажем лист 2 и сделать 3 копии этого листа. »
Если это вопрос, то желательно заводить под него отдельную тему.

PrintOut Method*[Word 2007 Developer Reference] (http://msdn.microsoft.com/en-us/library/bb237242(v=office.12).aspx), смотрите параметры «Copies», «Pages» и «Background».




© OSzone.net 2001-2012