Что нового

Замена части текста из одного файла в другом файле word

alberts1972

Новичок
Сообщения
16
Репутация
0
Как из одного файла word взять часть текста, эта часть текста неизвестна, зато известно между какими словами находиться. И заменить часть текста в другом файле ворда, заменяемый участок текста тоже неизвестен, зато известно между какими словами находиться. Также нужно подогнать размер шрифта и шрифт под текст второго файла. :stars:
 

pvnn

Осваивающий
Сообщения
305
Репутация
32
Для примера, создать test.docx со строками:
Код:
Fgghjghjgldlgkdfkgk
Dfgkd;lfgkl;d Текст1 нужно Текст2
Ываыа
Текст3 нужно заменить текст4

Будем искать нужный фрагмент между текстом: Текст1 и Текст2
Заменим найденный фрагмент между текстом: Текст3 и Текст4. Так как это пример, то замену буду делать в этом же файле, думаю не проблема потом сделать замену в другом Word-файле

Код:
#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
 
Верх