在Word文档中查找单词和/或变量并将其更改为粗体字体

时间:2016-05-04 15:00:24

标签: powershell vbscript fonts ms-word

我有一个脚本,我用xml中的文本替换word文档中的书签。

我通过书签属性将单词硬编码到word文档中。我试图将我硬编码到文档中的字符串的字体变为粗体并增加字体大小

StigData是在我的脚本中预先定义的... 该脚本工作正常,只是不加粗字体。

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

foreach ($stigDataItem in $stigData) 
{
   $title = $stigDataItem.title
   $check = $stigDataItem.group.Rule.check.'check-content'
   $ft = $stigDataItem.group.rule.fixtext.innerxml

   $doc.Bookmarks.Item("AllStigInfo").Range.Text ="FixText" + "`r`n" + $ft + "`r`n" +"`r`n"
   $doc.Bookmarks.Item("AllStigInfo").Range.Text ="Check Content" + "`r`n" + $check + "`r`n"
   $doc.Bookmarks.Item("AllStigInfo").Range.Text =$title + "`r`n"

}

$selection = $wd.selection
$selection.Font.Bold = $True
$stringcheck = "Check Content"
$selection.TypeText($stringcheck)

$doc.SaveAs([ref]$newfile)
$doc.Close()
$wd.Quit()
Remove-Variable wd

我试图选择我需要替换的单词,并用粗体字替换为:

$selection = $wd.selection
$selection.Font.Bold = $True
$stringcheck = "Check Content"
$selection.TypeText($stringcheck)

然而,这只是在文档中添加了一个粗体字。

我试图在任何地方加注FixTextCheck Content$title。同时使$title成为更大的字体。

还尝试提到https://blogs.technet.microsoft.com/heyscriptingguy/2006/02/01/how-can-i-boldface-a-specific-word-throughout-a-microsoft-word-document/,但这对我没用。

2 个答案:

答案 0 :(得分:0)

我不熟悉PowerShell,但逻辑似乎很清楚,所以我的建议应该有效:

您应声明一个或多个Word.Range对象,并将Bookmark.Range指定给它/它们,以便您可以直接使用Range。 (只要将某些内容分配给其范围,就会删除书签,这就是您无法继续使用它们进行进一步操作的原因。)

使用Ranges比使用Selection对象更可取,并且您可以拥有多个(Application只支持一个Selection)。

这样的事情:

if let view = recognizer.view, parent = recognizer.view.superview {

    // this will only let it scale to half size
    let minimumThreshold: CGFloat = 0.5
    var scale: CGFloat = recognizer.scale

    // assuming your view is square, which based on your example it is
    let newSize = view.frame.height * scale

    // prevents the view from growing larger than the smallest dimension of the parent view
    let allowableSize = min(parent.frame.height, parent.frame.width)
    let maximumScale: CGFloat = allowableSize/view.frame.height

    // change scale if it breaks either bound
    if scale < minimumThreshold {
        print("size is too small")
        scale = minimumThreshold
    }

    if newSize > allowableSize {
        print("size is too large")
        scale = maximumScale
    }

    // apply the transform
    view.transform = CGAffineTransformMakeScale(scale, scale)
}

如果你想在$rngBookmark = $doc.Bookmarks.Item("AllStigInfo").Range $rngBookmark.Text ="FixText" + "`r`n" + $ft + "`r`n" +"`r`n" $rngBookmark.Font.Bold = $True 属性的赋值中只加粗“FixText”并且没有任何内容,那么:

Text

折叠范围类似于按键盘上的左/右箭头将选区“折叠”到光标点。

答案 1 :(得分:0)

发现了两种方法。我在Word中使用了查找和替换方法。 在PowerShell中,我最终使用

方法1

$searchText=$replaceText= 'Check Content'
$wdReplaceAll  = 2
$wd=New-Object -ComObject Word.Application
$wd.Visible=$false
$doc = $wd.Documents.Open($newfile)
$wd.Selection.Find.Replacement.Font.Bold = $true
$wd.Selection.Find.Execute($searchText, $false, $true, $false, $false, $false, $true, $false, $true, $replaceText, $wdReplaceAll)

方法2

我还找到了一个VBscript,它查找特定的单词并替换并将其更改为粗体。使用PowerShell传递变量$newfile

网站:https://blogs.technet.microsoft.com/heyscriptingguy/2006/02/01/how-can-i-boldface-a-specific-word-throughout-a-microsoft-word-document/

#invoke script and passed $newfile to vbscript (added in my Powershell script)
$arg1 = "$newfile"
$arg2 = "$title"
$command = “cmd /C cscript 'boldfont.vbs' $arg1”
invoke-expression $command

#vbscript I created
Const wdReplaceAll  = 2
Set objWord = CreateObject(“Word.Application”)
objWord.Visible = True
Set objDoc = objWord.Documents.Open(“$newfile”)
Set objSelection = objWord.Selection
objSelection.Find.Text = “Check Content”
objSelection.Find.Forward = TRUE
objSelection.Find.MatchWholeWord = TRUE
objSelection.Find.Replacement.Font.Bold = True
objSelection.Find.Execute ,,,,,,,,,,wdReplaceAll

我将使用它来更改Fix Text$title

我想分享一下。可能会帮助别人。