Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl 使用OLE从Powerpoint中获取文本_Perl_Powerpoint_Ole - Fatal编程技术网

Perl 使用OLE从Powerpoint中获取文本

Perl 使用OLE从Powerpoint中获取文本,perl,powerpoint,ole,Perl,Powerpoint,Ole,我正试图从当前演示文稿中获取幻灯片及其标题的列表 到目前为止我能做到 my $powerpoint = Win32::OLE->GetActiveObject('Powerpoint.Application') my $ap = $$powerpoint { ActivePresentation } ; my $slides = $$ap { slides } ; 但是$slides仅具有属性应用程序计数父项 谁能指点我把这个拿远一点吗 我意识到一个显而易见的答案

我正试图从当前演示文稿中获取幻灯片及其标题的列表

到目前为止我能做到

    my $powerpoint = Win32::OLE->GetActiveObject('Powerpoint.Application')
    my $ap = $$powerpoint { ActivePresentation } ;
    my $slides = $$ap { slides } ;
但是
$slides
仅具有属性
应用程序计数父项
谁能指点我把这个拿远一点吗

我意识到一个显而易见的答案是不要使用Powerpoint。公司格言等等。

另请参见我对的回答

PowerPoint幻灯片没有特定的
标题
属性。它们有一个
名称
属性,但这不是一回事。形状的占位符类型属性可以告诉您它是否是标题:

#!/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: Title Page Title Slide2: Page with bullets Slide3: Page with chart Slide4: 幻灯片1:标题页标题 幻灯片2:带项目符号的页面 幻灯片3:带图表的页面 幻灯片4:
显然,幻灯片4上没有标题。

是的-这给了我一些有用的提示。奇怪的是,在我试图寻找时,却没有想到这一点。谢天谢地,让我先发制人的是我没有看到它:-)。昨天晚上很忙,白天也在工作。