VBS/WSH/JS - [решено] Замена текста во всех файлах Word

Ответить
Аватара пользователя
RiskSoft

VBS/WSH/JS - [решено] Замена текста во всех файлах Word

Сообщение RiskSoft »

Не работает 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

Re: VBS/WSH/JS - [решено] Замена текста во всех файлах Word

Сообщение Iska »

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

Re: VBS/WSH/JS - [решено] Замена текста во всех файлах Word

Сообщение RiskSoft »

Общая цель такова:



1. Найти в папке все файлы Word.

2. В каждом файле заменить слово "за май" на "за апрель"

3. Сохранить файл
Аватара пользователя
RiskSoft

Re: VBS/WSH/JS - [решено] Замена текста во всех файлах Word

Сообщение RiskSoft »

Цитата RiskSoft:



3. Сохранить файл
VBS/WSH/JS - [решено] Замена текста во всех файлах Word




Ранее, в приведённом Вами скрипте, документ сохранялся в той же папке под другим именем. Мы же будем:



1. Сохранять документ под тем же именем.

2. Только тогда, когда были сделаны замены.



Так?
Аватара пользователя
RiskSoft

Re: VBS/WSH/JS - [решено] Замена текста во всех файлах Word

Сообщение RiskSoft »

Гениально !!! Все работает, я в таком восторге Изображение) На что раньше уходило день, теперь все решается за пару минут.





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

Re: VBS/WSH/JS - [решено] Замена текста во всех файлах Word

Сообщение Iska »

Цитата RiskSoft:



А можно еще переделать скрипт, чтобы не было MsgBox о произведенной замене.
VBS/WSH/JS - [решено] Замена текста во всех файлах Word




Можно. Запускайте из командной строки как:



Код:

Код: Выделить всё

cscript.exe //nologo ""


Цитата RiskSoft:



И автоматом еще отправить измененный документ на печать весь документы и определенные страницы.
VBS/WSH/JS - [решено] Замена текста во всех файлах Word




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



И что Вы скажете по поводу моего вопроса
VBS/WSH/JS - [решено] Замена текста во всех файлах Word
?
Аватара пользователя
RiskSoft

Re: VBS/WSH/JS - [решено] Замена текста во всех файлах Word

Сообщение RiskSoft »

По пункту 1, ответ: ДА

По пункту 2, ответ: ДА



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



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

Re: VBS/WSH/JS - [решено] Замена текста во всех файлах Word

Сообщение RiskSoft »

Цитата RiskSoft:



По пункту 1, ответ: ДА

По пункту 2, ответ: ДА
VBS/WSH/JS - [решено] Замена текста во всех файлах Word




Тогда примерно так:


читать дальше »




Код:

Код: Выделить всё

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








Цитата RiskSoft:





Код:

Код: Выделить всё

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)

VBS/WSH/JS - [решено] Замена текста во всех файлах Word




Вам нужно в каждом документе делать множественные замены?




Цитата RiskSoft:



По поводу печати, мне хочется знать как вывести на печать файл Word. Но проблема заключается в том что мне нужно вывести не весь документ, а скажем лист 2 и сделать 3 копии этого листа.
VBS/WSH/JS - [решено] Замена текста во всех файлах Word




Если это вопрос, то желательно заводить под него отдельную тему.



PrintOut Method*[Word 2007 Developer Reference]
, смотрите параметры «Copies», «Pages» и «Background».
Ответить

Вернуться в «Скриптовые языки администрирования Windows»