【发布时间】:2015-11-05 02:27:28
【问题描述】:
Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName Office
Add-Type -AssemblyName Microsoft.Office.Interop.Powerpoint
#Getting Error - Add-Type -AssemblyName Office Microsoft.Office.Interop.Powerpoint.Slide.SlideShowTransition.Hidden
Function RunSlide {
$pptx = "h:\Test.ppt"
$osld = "Slide"
[bool] $sldState = "Slide.SlideShowTransition.Hidden"
$state = "False"
$hiddenCount = 0
$cc = 0
$application = New-Object -ComObject powerpoint.application
$presentation = $application.Presentations.open($pptx)
$count = 1
Start-Sleep -Seconds 3
ForEach ($osld In $Presentation.Slides)
{
$cc = $cc + 1
If ($sldState -eq "False") {$hiddenCount = $hiddenCount + 1; Write-Host "Slide State $sldState"}
Write-Host "Hidden Count is $hiddenCount"
$endCount = $presentation.Slides.Count
Write-Host "Total slide count is $endCount"
#Present Slide Show
[System.Windows.Forms.SendKeys]::SendWait("{F5}")
do
{
Start-Sleep -Seconds 6
[System.Windows.Forms.SendKeys]::SendWait("{RIGHT}")
$count = $count + 1
Write-Host "Slide Count is $count"
}
while ($count -le $endCount)
Write-Host "POWER POINT RESTARTING"
Stop-Process -processname POWERPNT
}
$b -eq 1
do {
$d = Get-Date
Write-Host "Slide ran as at $d"
CheckSlide
RunSlide
Start-Sleep -Seconds 3
}
While ($b = 1)
因此,我仅限于使用 powershell(新工作策略),因此正在将我们现有的 wscript 和 vbscript 文件调整为 Powershell。
我们有一个信息墙,它使用指向 PowerPoint 演示文稿的超链接。它会定期更新,因此需要打开、呈现然后关闭并重新打开。
到目前为止,我已经成功地做到了这一点。但由于隐藏幻灯片的数量和我的代码的性质,脚本有时会运行得比它的运行时间长得多(有时最多 40 张幻灯片)。
我的脚本检查 POWERPOINT 进程是否正在运行,如果没有,它会继续并打开文件。然后它会进行幻灯片计数,并在演示文稿的长度内运行演示文稿(添加计数直到达到总数)。
一旦完成,它将停止该过程,底部的 Do 循环将再次打开文件。冲洗重复。
问题是,总幻灯片计数也计算隐藏幻灯片。
我试图通过 ForEach 循环实现的目的是让脚本查看每个幻灯片状态,如果隐藏它会增加计数。从总数中减去此计数,Do 循环使用此计数来显示正确数量的幻灯片。现在 ForEach 循环只是报告计数,而不是减去(因为我还不能让它计算隐藏的数量)
我意识到可能有更简单的演示方法,但是从 Vb 到 PS 的翻译已经让我头疼了,这根本不起作用!获得一些隧道视野和有限的互联网接入也阻碍了进展。如果有人可以看一下并说出多余的内容以及我可能遗漏的内容,将不胜感激。谢谢,
【问题讨论】:
-
我的第一个猜测是这将始终评估为 $true: [bool] $sldState = "Slide.SlideShowTransition.Hidden"
标签: powershell powerpoint