Перейти к содержимому раздела
Серый форум
разработка скриптов
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
1 2008-06-26 11:04:22
- The gray Cardinal
- Разработчик
- Неактивен
- Рейтинг : [5|0]
Тема: VBScript: замена текста в документе Word
Пример заменяет все вхождения строки «1111» на «2222» в файле «C:temp1.doc» и сохраняет результат в файл «C:temp2.txt».
Option Explicit
Const wdReplaceAll = 2
Const wdFormatText = 2
Dim objWord
Dim objDoc
Set objWord = WScript.CreateObject("Word.Application")
Set objDoc = objWord.Documents.Open("C:temp1.doc")
With objWord
'.Visible = True
With .Selection.Find
.ClearFormatting
.Replacement.ClearFormatting
.Text = "1111"
.Replacement.Text = "2222"
.MatchCase = 0
.MatchWholeWord = 0
.MatchWildcards = 1
.MatchSoundsLike = 0
.MatchAllWordForms = 0
.Forward = 1
.Wrap = 1
.Format = 0
' Replace - 11-й параметр метода .Execute
' Все остальные параметры - опциональные, их можно опустить,
' коль большинство из них было задано выше.
' Хотя можно было задать их и в методе .Execute
.Execute ,,,,,,,,,,wdReplaceAll
End With
End With
objDoc.SaveAs "C:temp2.txt", wdFormatText
objWord.Quit
Set objWord = Nothing
WScript.Quit 0
Автор примера — alexii.
Предложения в русском языке начинаются с большой буквы и заканчиваются точкой.
В названии ветки всегда должен быть указан язык программирования или среда исполнения скрипта, если это возможно.
Сообщения 1
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
ivladislaw:
Зарплата — ясное дело украинское законодательство. Сумма прописью — в гривнах, поэтому числительные женского рода. Программа писалась так, что любой профессионал ругался бы — вариантные переменные, Option Explicit отсутствует. Однако она работала без ошибок в отличие от «суммы прописью» написанной другим человеком, работавшим ранее программистом «по всем правилам» — та сумму 2 грн с копейками превращала в 11 тысяч — прямо цифру в ячейке (такое можно легко сделать намеренно, но как появилась такая ошибка?). Есть ещё программа, верстающая журналы-ордера, ведомости и оборотный баланс в Excel на основании введённой книги хозяйственных операций. Когда этот же человек проявил инициативу и поставил всем Openoffice, ссылаясь на экономию денег — я был дико злым. Это плохо повлияло на моё отношение к Open Source вообще…
Думаю, что выложу шашки. Надо сказать, что сделал я их 6 или 7 лет назад и код, скорее всего, ужасен:)
По просьбам читателей сайта Александр Витер разработал свой вариант макроса пакетной замены фрагментов текста в документах Word. Об этом его просили в комментариях к заметке Поиск и замена текста во многих документах одновременно.
Александр предлагает скачать (ниже) бета-версию его разработки кто заинтересован в подобном решении. Вот, что он предлагает.
Это третья бета-версия макроса пакетной замены. Теперь ее нужно тестировать.
Что уже сделано:
1. Доработан механизм поиска в документе. Текст можно заменять как в основном тексте, так и в надписях, в гиперссылках и объектах WordArt.
2. Добавлены опции «Учитывать регистр» и «Слово целиком».
3. Если файл доступен только для чтения, то он просто пропускается. Запись об этом делается в лог-файл. Таким образом, можно работать и с документами в локальной сети.
4. Глубина вложенности каталогов, в которых можно искать файлы, удовлетворяющие шаблону, не ограничена.
5. Каждый сеанс поисказамены записывается в подробный лог-файл с указанием документа, проведенных в нем замен, затраченного времени и настроек замены.
6. В процессе поисказамены отображается прогресс-бар.
Я со своей стороны провел тесты, у меня ошибок не возникает. Возможные ошибки я постарался предусмотреть, но над этим еще нужно будет работать.
Итак, пожалуйста скачивайте макрос и пробуйте его в деле. Все замечания по макросу (ошибки, предложения) пишите в комментариях к этой заметке.
Массовый поиск и замена в документах MS Office (Word и Excel)
Имеется большое количество документов Word или Excel и в каждом документе нужно
изменить несколько фраз. В каждом документе через замену (Найти и заменить ) это слишком долго.
Решение:
- Вариант с использованием макроса
- В виде приложения
a) для Microsoft Excel:
Скопировать макрос в папку с файлами, запустить макрос, задать условия замены, заключая их в кавычки.
выбрать любой файл из папки.
Программа пройдётся по всем листам всех книг (*.xls;*.xlsx) в этой папке,
и поменяет текст в заданной графе. Недостатком способа очевиден –
замена производится только в указанной графе.
Скачать макрос можно по ссылке
б) для Microsoft Word:
Создать новый документ Word, открыть редактор Microsoft VBA, добавить
новый модуль, скопировать текст процедуры ниже. О том как создать макрос более подробно написано
здесь.
При выполнении макроса нужно выбрать файлы, данные в которых подлежат замене:
Что изменить и на что изменить прописывается в теле макроса:
что_заменить = «123»
чем_заменить = «1234»
Сам макрос:
Для документов Word подойдет @Text Replacer — бecплaтнaя пpoгpaммa для быcтpoгo пoиcкa и зaмeны
тeкcтa в фaйлax из выбpaннoй пaпки и влoжeнныx пoдпaпoк.
Работает с дoкумeнтaми тeкcтoвoгo peдaктopa Word: *.doc, *.docx, *.rtf, фaйлaми тeкcтoвoгo фopмaтa:
*.txt, *.ini, *.html, *.php и дp., paбoтa c кoтopыми вoзмoжнa чepeз cтaндapтный Блoкнoт Windows.
Вce фaйлы дpугиx типoв oбpaбaтывaютcя пpoгpaммoй кaк тeкcтoвыe.
Пpoгpaммoй пoддepживaeтcя пoиcк и зaмeнa мнoгocтpoчныx фpaгмeнтoв тeкcтa c учeтoм peгиcтpa и
игнopиpуeмыx cимвoлoв — тaкиx кaк пpoбeлы и пepeвoды cтpoки (windows / *nix).
Программа бесплатная, скачать можно по
ссылке
с официального сайта программы
Не пробуйте @Text Replacer для документов Excel – программа их портит!
Для документов Excel попробуйте FireBall.exe – небольшую программу, не требующую установки.
Файлы Excel необходимо скопировать в папку с FireBall.exe.
В ходе работы программа создает новые файлы, добавляя к названию приставку new.
Скачать программу можно по
ссылке
#include <Word.au3>
#include <Array.au3>
$oWord = _Word_Create() ; Создать Новый экземпляр Word
$oDoc=_Word_DocOpen($oWord,@ScriptDir&'test.docx') ; Открыть
; Поиск нужного фрагмента
$Pos1=ContextSearch("текст1")
$Pos2=ContextSearch("текст2")
$oDoc.Range($Pos1[1],$Pos2[0]).Select ; Выделить нужный нам фрагмент для наглядности
$Data=$oDoc.Range($Pos1[1],$Pos2[0]).Text ; Получить текст фрагмента
MsgBox(0,'Найденный фрагмент',$Data)
; Поиск фрагмента для замены
$Pos1=ContextSearch("текст3")
$Pos2=ContextSearch("текст4")
$oDoc.Range($Pos1[1],$Pos2[0]).Select ; Выделить нужный нам фрагмент для замены
; $oWord.Selection.TypeText($Data) ; Заменить найденный текст
; Поиск фрагмента строки в документе Word, по умолчанию первый
Func ContextSearch($Context,$Occurrence=1)
Local $KolOccurrence=0 ; Число вхождений
Local $aPos[2]=[0,0] ; Массив позиций начала и конца фрагмента
$oWord.Documents(1).Select
For $i=1 To $Occurrence
$oWord.Selection.Find.Text = $Context
$oWord.Selection.Find.ClearFormatting ; Очищает форматирование внутри объекта Find, поиск без учета форматирования
$oWord.Selection.Find.Execute ; Запустить поиск
If $oWord.Selection.Find.Found()=False Then
MsgBox(16,'Не найден '&$i&' фрагмент',$Context)
;Return $aPos
Exit
EndIf
$KolOccurrence+=1
If $Occurrence=$KolOccurrence Then
$aPos[0]=$oWord.Selection.start
$aPos[1]=$oWord.Selection.End
;$oWord.Selection.Collapse($wdCollapseEnd) ; Снять выделение Курсор в конце выделенного текста
Return $aPos
EndIf
Next
EndFunc