2016-04-26 12 views
0

Ich versuche, ein Wort zu finden und zu ersetzen. Ich habe 2 Probleme, die ich bekomme Fehler Exception calling "Execute" with "15" argument(s): "String parameter too long." Ich nehme an, weil mein Ersatztext über 255 Zeichen ist. Kann mir jemand mit einer alternativen Methode helfen, das Skript dazu zu bringen, über 255 Zeichen zu ersetzen? Hier ist der CodeString zu lang Fehler, Text in Powershell suchen und ersetzen

$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" 

Jede Beratung sehr geschätzt wird.

+0

Ja, es gibt ein Limit von 255 Buchstaben über das Objektmodell. –

+0

Zum zweiten Thema - das sollte wirklich in einer separaten Frage sein, da die beiden Dinge völlig unabhängig sind. Sie zeigen uns nichts von der von Ihnen verwendeten Word.Application-Verwaltung, was es unmöglich macht zu sagen, was das Problem sein könnte, aber ... Haben Sie den Application.Quit() -Befehl gesendet? Und geben Sie alle Word-bezogenen Objekte korrekt frei, so dass sie keine Zeiger halten? –

+0

Ich habe die Frage bearbeitet, um eine Frage zu unterstützen, listet die Word.application-Verwaltung auf. Mein Hauptproblem ist es, über die 255 Zeichen zu gehen. – ShanayL

Antwort

2

Ich habe meinen Code viel überarbeitet. Ich habe einige Lesezeichen in meinem Word-Dokument zugewiesen und diesen Lesezeichen eine Lesezeichenvariable zugewiesen. Also wird dieser Code das Lesezeichen finden, das ich gesetzt habe, und es durch das ersetzen, was ich ihm gesagt habe.

Hier sind die endgültigen Ergebnisse:

$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

Ja, wenn Ihr Ziel ist, eine "Vorlage" zu verwenden, um Daten an bestimmten Orten zu verbinden, ist Lesezeichen der bessere Ansatz als Finden/Ersetzen :-) Für ein anderes Mal, einschließlich dieser Art von Informationen (* warum * Ihr Code tut was es tut) würde Vorschläge für alternative Ansätze verbieten. Gut gemacht! –

Verwandte Themen