2016-04-26 7 views
0

Я пытаюсь найти и заменить на текстовом документе. У меня есть 2 вопроса один я получаю ошибку Exception calling "Execute" with "15" argument(s): "String parameter too long." Я предполагаю, потому что мой текст замены составляет более 255 символов. Может ли кто-нибудь помочь мне с альтернативным способом заставить скрипт заменить более 255 символов? Вот кодString Too Long Error, Find and Replace Text в Powershell

$Filename=file1.docx 

Function OpenWordDoc($Filename) 

{ 
    $Word=NEW-Object –comobject Word.Application 
    Return $Word.documents.open($Filename) 
} 

[xml]$xmldata = Get-Content "file.xml" 
$Doc=OpenWordDoc -Filename "file1.docx" 

Function SearchAWord($Document,$findtext,$replacewithtext) 
{ 

$FindReplace=$Document.ActiveWindow.Selection.Find 
$matchCase = $false; 
$matchWholeWord = $true; 
$matchWildCards = $false; 
$matchSoundsLike = $false; 
$matchAllWordForms = $false; 
$forward = $true; 
$format = $false; 
$matchKashida = $false; 
$matchDiacritics = $false; 
$matchAlefHamza = $false; 
$matchControl = $false; 
$read_only = $false; 
$visible = $true; 
$replace = 2; 
$wrap = 1; 
$FindReplace.Execute($findText, $matchCase, $matchWholeWord,` 
$matchWildCards, $matchSoundsLike, $matchAllWordForms, $forward, $wrap,` 
$format, $replaceWithText, $replace, $matchKashida ,$matchDiacritics,` 
$matchAlefHamza, $matchControl) | Out-Null 
} 

Function SaveAsWordDoc($Document,$FileName) 
{ 
$Document.Saveas([REF] $Filename) 
$Document.close() 
} 

    $checkcontent = $xmldata.Benchmark.Group.Rule.check.'check-content' 
    $description = $xmldata.Benchmark.group.rule.description 

    SearchAWord –Document $Doc -findtext '<Information derived from discussion>' -replacewithtext $description 
    SearchAWord –Document $Doc -findtext '<Information derived from content>' -replacewithtext $checkcontent 

    SaveAsWordDoc –document $Doc –Filename "results.docx" 

Любые советы оценили.

+0

Да, есть предел 255 символов с помощью объектной модели. –

+0

Что касается второго вопроса - это действительно должно быть в отдельном вопросе, поскольку две вещи абсолютно не связаны. Вы не показываете нам какое-либо из используемого вами управления Word.Application, из-за чего невозможно сказать, в чем проблема, но ... Вы отправили команду Application.Quit()? И правильно ли вы освобождаете все объекты, связанные с Word, чтобы они не «удерживали указатели»? –

+0

Я отредактировал вопрос, чтобы поддержать один вопрос в списке объявлений Word.application management. Моя основная проблема заключается в том, чтобы передать ей 255 символов. – ShanayL

ответ

2

Я в конечном итоге переделал свой код. Я назначил несколько закладок в своем документе с текстом и назначил этим закладкам переменную закладок. поэтому этот код найдет закладку, которую я установил, и заменим ее на то, что я сказал ей.

Вот окончательные результаты:

$template = "template.docx" 
$wd = New-Object –comobject Word.Application 
$doc=$wd.documents.Add($template) 

[xml]$xmldata = Get-Content "file.xml" 
$newfile="file.docx" 

$description = $xmldata.Benchmark.group.rule.description 
$checkcontent = $xmldata.Benchmark.Group.Rule.check.'check-content' 

#replace Description Bookmark 
$objrange = $doc.Bookmarks.Item("Description").Range 
$objrange.Text = $description 

#replace Check Content Bookmark 
$objrange = $doc.Bookmarks.Item("CheckContent").Range 
$objrange.Text = $checkcontent 

#save and close document 
$doc.SaveAs([ref]$newfile) 
$doc.Close() 
$wd.Quit() 
+1

Да, если ваша цель - использовать «шаблон» для подключения данных в определенные места, закладки лучше подходят, чем Find/Replace :-) В другой раз, включая такую ​​информацию (* почему * ваш код делает то, что это делает) будут незаконные предложения для альтернативных подходов. Отличная работа! –