2016-09-16 3 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, но тогда все ноты текст становится жирным. В моих заметках у меня есть одно слово в верхней части заметок, выделенных жирным шрифтом, а затем текст под ним. Например, заметка на слайде мой взгляд, как это:

Примечание Название

Помощь мне с этой строкой.

После PowerShell обновляет поле примечаний он сохраняет его в новый файл .pptx но нота теперь выглядит следующим образом:

Примечание Название

Помогите мне с этим stringreplaced.

Любые идеи о том, как обновлять заметки слайдов, не испортив никакого форматирования, найденного в заметках? Это только испортит форматирование слайдов обновлений скриптов.

ответ

2

При изменении всего текстового содержимого текстового диапазона в PPT, как и ваш код, измененный textrange будет получать форматирование первого символа в диапазоне. Я не знаю, как вы могли бы сделать это в PowerShell, но вот пример в РРТ VBA, который демонстрирует ту же проблему и показывает, как использовать собственный 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 
+0

Используя этот метод кажется, берет все содержимое и заменяет их. Вместо того, чтобы заменить слова «образец текста» на «пример текста», он заменяет весь текст .Text «примером текста». –

+0

Не здесь. Возможно, версия PowerShell не совсем точно переводится. Отправьте код, который у вас есть сейчас; возможно, кто-то, более знакомый с PowerShell, может посмотреть. –

+0

Скорее всего, я знаю, но вот рабочий фрагмент PowerShell: '$ presentation.Slides [1] .Shapes [4] .TextFrame.TextRange.Replace ($ f0a, $ f1a)'. Делает работу красиво и не беспокоит другое форматирование в форме. (PowerShell 2016). –

Смежные вопросы