Показать полную графическую версию : [решено] Замена текста во всех файлах 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
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. Сохранить файл
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 о произведенной замене.
И автоматом еще отправить измененный документ на печать весь документы и определенные страницы.
А можно еще переделать скрипт, чтобы не было MsgBox о произведенной замене. »
Можно. Запускайте из командной строки как:
cscript.exe //nologo "<Путь к скрипту>"
И автоматом еще отправить измененный документ на печать весь документы и определенные страницы. »
Прочтите ещё раз то, что Вы написали. Я не смог уяснить для себя с смысл данного предложения.
И что Вы скажете по поводу моего вопроса выше (http://forum.oszone.net/post-1903040.html#post1903040)?
RiskSoft
20-04-2012, 15:58
По пункту 1, ответ: ДА
По пункту 2, ответ: ДА
Все верно и все правильно сделано!
По поводу печати, мне хочется знать как вывести на печать файл Word. Но проблема заключается в том что мне нужно вывести не весь документ, а скажем лист 2 и сделать 3 копии этого листа.
По пункту 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
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.