Скрипт Powershell для получения адресов гиперссылок на слайде Powerpoint И имя каждого связанного объекта Shape? - PullRequest
0 голосов
/ 23 марта 2020

Я боролся с чем-то, что кажется тривиальным ...

Все, что я хочу сделать в своем скрипте PowerShell, это l oop через все слайды в презентации Powerpoint (ppt 2016), отображать все гиперссылки, связанные с каждым слайдом AND имя объекта Shape, с которым связана гиперссылка.

Я пробовал два разных способа:

  1. l oop через все Гиперссылки в слайд-шоу, но я не могу кажется получить имя соответствующего объект формы .
  2. l oop через все Shapes в слайд-шоу, но я не могу , кажется, получить адрес из любая связанная гиперссылка .

Мои поиски не дали ничего очевидного. Из объекта формы (slide.shapes) мне кажется, что я ничего не могу сделать с «shape.linkformat.sourcefullname» (обычно пустым), а с объектом гиперссылки (slide.hyperlinks) я не могу получить имя связанного объекта Shape.

Также, если это имеет значение, обратите внимание, что структура show-source-folder (много файлов .ppsx) представляет собой смесь возрастов слайд-шоу, некоторые возвращаются к Win 7 и PPT 2010.

Вот упрощенный фрагмент кода, использующий список slide.hyperlinks (в отличие от списка slide.shapes и выкапывания h-link):

    $file = "$env:UserProfile\DOcuments\myShow.ppsx"
    Add-Type -AssemblyName Office
    $objPPT = New-Object -ComObject powerpoint.Application
    $ShowPres = $objPPT.Presentations.Open($file, $Null, $Null,[Microsoft.Office.Core.MsoTriState]::msoFalse)
    if ($ShowPres) {
        Foreach ($Slide in $ShowPres.Slides) {
            if ($Slide.HyperLinks) {
                Foreach ($HLink in $Slide.HyperLinks) {
                    Write-Host "[Slide]: $($Slide.SlideNumber), Link: <$($HLink.address)>, Shape Name: ???"
                } #end ea. HyperLink
            } else {
                Write-Host "[No Hyperlink(s)], Slide #: $($Slide.SlideNumber)"
            }
        } #end: loop ea. slide
        $ShowPres.Close()
    } else {
        # empty presentation?
        Write-Host -back Yellow -fore Black " No Presentation FILE: $file"
    }
    $objPPT.Visible = [Microsoft.Office.Core.MsoTriState]::msoTrue
    $objPPT.Quit() 
    $objPPT = $null
    [gc]::collect()
    [gc]::WaitForPendingFinalizers()

Любая помощь / совет / образование высоко ценится .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...