Я боролся с чем-то, что кажется тривиальным ...
Все, что я хочу сделать в своем скрипте PowerShell, это l oop через все слайды в презентации Powerpoint (ppt 2016), отображать все гиперссылки, связанные с каждым слайдом AND имя объекта Shape, с которым связана гиперссылка.
Я пробовал два разных способа:
- l oop через все Гиперссылки в слайд-шоу, но я не могу кажется получить имя соответствующего объект формы .
- 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()
Любая помощь / совет / образование высоко ценится .