powershell编辑powerpoint幻灯片笔记

时间:2016-09-16 16:31:13

标签: powershell powerpoint

我正在尝试使用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文件,但现在注释如下:

注意标题

帮我替换这个字符串。

有关如何更新幻灯片备注而不会弄乱备注中的任何格式的任何想法?它只会使脚本更新的幻灯片格式化。

1 个答案:

答案 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