我正在尝试使用PowerShell以编程方式更新PowerPoint幻灯片中的注释。能够做到这一点将节省大量的时间。下面的代码允许我使用PowerShell编辑notes字段,但每次都会混淆格式。
$PowerpointFile = "C:\Users\username\Documents\test.pptx"
$Powerpoint = New-Object -ComObject powerpoint.application
$ppt = $Powerpoint.presentations.open($PowerpointFile, 2, $True, $False)
foreach($slide in $ppt.slides){
if($slide.NotesPage.Shapes[2].TextFrame.TextRange.Text -match "string"){
$slide.NotesPage.Shapes[2].TextFrame.TextRange.Text = $slide.NotesPage.Shapes[2].TextFrame.TextRange.Text -replace "string","stringreplaced"
}
}
Sleep -Seconds 3
$ppt.Save()
$Powerpoint.Quit()
例如,现在它将遍历每个幻灯片的笔记并将单词字符串更新为字符串替换,但整个笔记文本变为粗体。在我的笔记中,我在注释的顶部有一个单词,它是粗体,然后是文本。例如,幻灯片上的注释我的样子如下:
注意标题
帮我解决这个问题。
在PowerShell更新notes字段后,它将其保存到新的.pptx文件,但现在注释如下:
注意标题
帮我替换这个字符串。
有关如何更新幻灯片备注而不会弄乱备注中的任何格式的任何想法?它只会使脚本更新的幻灯片格式化。
答案 0 :(得分:2)
当您在PPT中更改文本范围的整个文本内容时,正如您的代码所做的那样,更改的文本范围将选取范围中第一个字符的格式。我不确定您是如何在PowerShell中执行此操作的,但这是PPT VBA中的一个示例,它演示了同样的问题并演示了如何使用PPT自己的Replace方法来解决问题:
Sub ExampleTextReplace()
' Assumes two shapes with text on Slide 1 of the current presentation
' Each has the text "This is some sample text"
' The first character of each is bolded
' Demonstrates the difference between different methods of replacing text
' within a string
Dim oSh As Shape
' First shape: change the text
Set oSh = ActivePresentation.Slides(1).Shapes(1)
With oSh.TextFrame.TextRange
.Text = Replace(.Text, "sample text", "example text")
End With
' Result: the entire text string is bolded
' Second shape: Use PowerPoint's Replace method instead
Set oSh = ActivePresentation.Slides(1).Shapes(2)
With oSh.TextFrame.TextRange
.Replace "sample text", "example text"
End With
' Result: only the first character of the text is bolded
' as it was originally
End Sub