gpt4 book ai didi

Powershell - 计算隐藏的 Powerpoint 幻灯片

转载 作者:行者123 更新时间:2023-12-04 01:23:28 26 4
gpt4 key购买 nike

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 的转换已经让我费尽心思,它就是行不通!狭隘的视野和有限的互联网访问也阻碍了进步。如果有人可以看一下并说出什么是多余的以及我可能遗漏了什么,将不胜感激。谢谢,

最佳答案

我不明白你认为 [bool] $sldState = "Slide.SlideShowTransition.Hidden" 应该如何工作。

您正在将(转换)一个字符串(实际上所有幻灯片都相同)转换为 bool 值;这将始终被评估为 $true

我建议删除那个 ligne 并在 ForEach 循环中尝试这个:

(...)

$cc++ # equivalent to $cc = $cc + 1
$sldState = $osld.SlideShowTransition.Hidden
if($sldState) { # equivalent to if($sldState -eq $true)
$hiddenCount++
Write-Host "Slide State $sldState"
}
Write-Host "Hidden Count is $hiddenCount"

(...)

$sldState 现在将为每张幻灯片获取当前幻灯片对象 $osld 上的 SlideShowTransition.Hidden 属性(根据到 MSDN )。

我猜你也可以通过直接计算非隐藏幻灯片来简化事情,就像这样:

$presentation.Slides | ForEach-Object {
if(-not $_.SlideShowTransition.Hidden) {
$visibleSlidesCount++
}
}
Write-Host "There are $visibleSlidesCount visible slides in this presentation"

关于Powershell - 计算隐藏的 Powerpoint 幻灯片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33511506/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com