gpt4 book ai didi

perl - 使用 OLE 从 Powerpoint 中获取文本

转载 作者:行者123 更新时间:2023-12-04 16:18:55 25 4
gpt4 key购买 nike

我正在尝试使用 Win32::OLE从当前演示文稿中获取幻灯片列表及其标题。

到目前为止我可以得到

    my $powerpoint = Win32::OLE->GetActiveObject('Powerpoint.Application')
my $ap = $$powerpoint { ActivePresentation } ;
my $slides = $$ap { slides } ;

但是 $slides只有属性 Application Count Parent任何人都可以指出我采取这个进一步。

我意识到一个明显的答案是不要使用 Powerpoint。公司命令等等。

最佳答案

另请参阅我对 Automating a Job at Work: Importing Powerpoint Bullet Text into an Excel Sheet 的回答.

PowerPoint 幻灯片没有特定的 Title属性(property)。他们有一个 Name属性(property),但那不是一回事。形状的占位符类型属性可以告诉您它是否是标题:

#!/usr/bin/perl

use strict; use warnings;
use Try::Tiny;
use Win32::OLE;
use Win32::OLE::Const qw( Microsoft.PowerPoint );
use Win32::OLE::Enum;

$Win32::OLE::Warn = 3;

my $ppt = get_ppt();

my $presentation = $ppt->Presentations->Open('test.ppt', 1);
my $slides = Win32::OLE::Enum->new( $presentation->Slides );

SLIDE:
while ( my $slide = $slides->Next ) {
printf "%s:\t", $slide->Name;
my $shapes = Win32::OLE::Enum->new( $slide->Shapes );
SHAPE:
while ( my $shape = $shapes->Next ) {
my $type = $shape->PlaceholderFormat->Type;
if ( $type == ppPlaceholderTitle
or $type == ppPlaceholderCenterTitle
or $type == ppPlaceholderVerticalTitle
) {
print $shape->TextFrame->TextRange->text;
last SHAPE;
}
}
print "\n";
}

$presentation->Close;

sub get_ppt {
my $ppt;

try {
$ppt = Win32::OLE->GetActiveObject('PowerPoint.Application');
}
catch {
die $_;
};

unless ( $ppt ) {
$ppt = Win32::OLE->new(
'PowerPoint.Application', sub { $_[0]->Quit }
) or die sprintf(
'Cannot start PowerPoint: %s', Win32::OLE->LastError
);
}

return $ppt;
}

输出:

Slide1:标题页标题
幻灯片 2:带有项目符号的页面
幻灯片 3:带图表的页面
幻灯片4:

显然,Slide4 上没有标题。

关于perl - 使用 OLE 从 Powerpoint 中获取文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3678663/

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