我有一个问题,即word文档中的随机空格没有相同的格式字体,而我正试图找到一种方法将字体更改为它周围的字体。
我发现了一些我测试过的VB,它选择了文本并用彩色文本替换它:
Sub ChangeFont()
With ActiveDocument.Content.Find
.ClearFormatting
.Text = " "
Dim fontName As String
fontName = "Calibri"
With .Replacement
.ClearFormatting
.Font.Name = fontName
End With
.Forward = True
.Wrap = wdFindContinue
.Format = True
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
.Execute Replace:=wdReplaceAll
End With
End Sub
现在我正在尝试找出一种方法,而不是替换字体文本和颜色,获取字符前面的字体并应用该字符上存在的字体。有没有办法获取索引值,只是将字体名称拉入替换命令?有更简单的方法吗?
理想情况下我想在powershell中执行此操作,但上面的代码在VB中工作,但是当我尝试调整它时,我显然搞砸了一些东西,所以我只是在我调整之前尝试编写功能代码。这是我试图构建的powershell:
$app = New-Object -ComObject Word.application
$app.Visible = $True
$doc = $app.Documents.Open($FileName,$null) #Open FileName, ConfirmConversions , ReadOnly -1 = MSOTrue
$Content = $doc.Content.Find
$Content.ClearFormatting
$Content.Text = " "
$Content.Replacement.ClearFormatting
$Content.Replacement.Text = "TEST"
$Content.Replacement.Font.Name = "Georgia"
$Content.Forward = -1 #true
$Content.Wrap = 1 #wdFindContinue
$Content.Format = -1
$Content.MatchCase = 0 #false
$Content.MatchWholeWord = 0
$Content.MatchWildcards = 0
$Content.MatchSoundsLike = 0
$Content.MatchAllWordForms = 0
$Content.Execute.Replace("2") #wdReplaceAll
$doc.Close() | out-null
$app.Quit() | out-null
答案 0 :(得分:1)
没有必要替换任何东西,只需找到每个空格,并将其字体设置为字体之前的字符。
$Word = New-Object -ComObject Word.Application
$Doc = $Word.Documents.Open($FilePath)
$DocFind = $Doc.Content.Find
Do{
$DocFind.ClearFormatting()
$DocFind.Text = " "
$NextSpace = $DocFind.Execute()
$DocFind.Parent.Font = $DocFind.Parent.Previous(1,1).Font
}Until(!$NextSpace)
找到文档中的第一个空格,并将其字体设置为之前字符的字体,然后尝试查找下一个空格。这样做直到它找不到另一个空间。