2016-09-16 39 views
1

私は、PowerShellを使用して、PowerPointスライドノートのメモをプログラマで更新しようとしています。これを行うことができることは、膨大な時間を節約します。以下のコードでは、PowerShellでノートフィールドを編集することができますが、そのたびにフォーマットが崩れます。powershell edit powerpointスライドノート

$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() 

例えば、今では、各スライドのノートを反復処理し、stringreplacedする単語列を更新するが、その後、全体のノートのテキストが太字になります。私のノートでは、ノートの上部に太字で1つの単語があり、その下にテキストがあります。例えば、スライド上の注意事項このように私の表情:

ノートタイトル

は、この文字列で私を助けて。

PowerShellはノートのフィールドを更新した後、それは新しい.PPTXファイルに保存しますが、ノートは次のようになります。

ノートタイトル

このstringreplacedで私を助けて。

メモに書かれている書式を崩さずにスライドノートを更新する方法についてのアイデアはありますか?それは、スクリプトが更新するスライドの書式設定を駄目にするだけです。

答えて

2

PPTのテキスト範囲のテキスト内容全体を変更すると、コードの実行中に、変更されたテキスト範囲がその範囲内の最初の文字の書式を取得します。私はあなたがPowerShellでこれを実行したいかどうかはわかりませんが、ここで同じ問題を示し、問題を解決する代わりに、PPT自身のReplaceメソッドを使用する方法を示しPPT VBAでの例です:

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 
+0

この方法を使用します全体の内容を取り、それらを置き換えるように見える。単語 "sample text"を "example text"に置き換える代わりに、.Text全体を "example text"に置き換えます。 –

+0

ここにはありません。おそらく、これのPowerShellバージョンは、きわめて正確に翻訳されているとは限りません。あなたが今持っているコードを投稿してください。おそらく、PowerShellをよく知っている人が一見することができます。 –

+0

私は幾分古いと思いますが、実際のP​​owerShellスニペットは次のとおりです: '$ presentation.Slides [1] .Shapes [4] .TextFrame.TextRange.Replace($ f0a、$ f1a)'。仕事をうまくやって、形の中の他の書式設定を妨げないでください。 (PowerShell 2016)。 –