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

标签 perl powerpoint ole

我正在尝试使用 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/

相关文章:

c# - PowerPoint 插件中的文本颜色

linux - 打开和编辑文件对另一个文件也有效

perl - 使用字符串访问多维哈希

java - 如何使用宏在 PowerPoint 中显示文本文件的内容

python - 使用 OLE 工具从 Python (Linux) 中的 VSD(Windows Visio 二进制)文件读取数据非常不清楚,还有其他方法可以提取数据吗?

java - 在 Java 中使用 Eclipse SWT OleClientSite 打开带有 .doc 扩展名的 Word 文档

.net - 如何以编程方式填充并获取 Excel 电子表格的 PDF 输出?

algorithm - 将 (key,value) 数据转换为 csv 格式

Perl CGI 元标签

c# - PowerPoint 录制幻灯片放映功能可通过 Interop with C# 访问