Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Замена текста во всех файлах Word (http://forum.oszone.net/showthread.php?t=233183)

RiskSoft 19-04-2012 21:11 1902769

Замена текста во всех файлах Word
 
Не работает 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 1902817

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 1903018

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

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

Iska 20-04-2012 10:58 1903040

Цитата:

Цитата RiskSoft
3. Сохранить файл »

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

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

Так?

RiskSoft 20-04-2012 11:08 1903046

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


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 1903073

Цитата:

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

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

cscript.exe //nologo "<Путь к скрипту>"
Цитата:

Цитата RiskSoft
И автоматом еще отправить измененный документ на печать весь документы и определенные страницы. »

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

И что Вы скажете по поводу моего вопроса выше?

RiskSoft 20-04-2012 15:58 1903240

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

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

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

Iska 20-04-2012 20:03 1903407

Цитата:

Цитата RiskSoft
По пункту 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



Цитата:

Цитата 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)

»

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

Цитата:

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

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

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


Время: 05:48.

Время: 05:48.
© OSzone.net 2001-