我已经要求自动执行特定任务,在今天的工作而占用了很多我们的时间!以下是需要做什么和我将感谢任何的帮助,我怎么可以这样做(执行情况的意见)界内的我所知,如果可能的。

的问题

我有一个 PowerPoint 文件(.ppt).我想提取的文字从那里(案文是在圆点格式)。我想插入这些子弹点进入一个 Excel 片,每个子弹点应该是一个行。我也要把在邻列的页面这个要点文字被采取。

所以,基本上:从中提取百分点-->插入Excel表的每个排被一颗子弹点。

技术提供给我

Perl,PHP and Java。

喜欢PHP 是诚实的,因为这是我的主要语言,但是我很乐意考虑其他任何你们/加仑认为是最好的。第二会Perl然后Java。我不想要编制的课程和安装JAVA只是为了这个!:)

关键问题

  • 你怎么参考一颗子弹?
  • 我可能结束与只是一个载的非结构化的文本,在Excel表?
  • 是否有任何障碍读从一个ppt文件?

更新

我会考虑MS技术(VB,等等。) 如果它让生活更容易但我从来没有使用它,我鄙视MS技术!希望我没有得到火烧的福音传道者!:)

有帮助吗?

解决方案

这里是一样的脚本用 Win32::OLE.

通过这种方式,一旦你已经转变幻灯片进入一个格式可以处理,可以使用 电子表格::WriteExcel 在非MS系统编写的输出。因此,我建议两个方案:一个变换的PowerPoint文件和另一个生成的Excel文件。

注意一个极好的信息来源Microsoft Office应用程序的对象的浏览器。你可以访问它通过工具→宏→些基本编辑器。一旦你的编辑打了 F2 浏览界面,方法和属性提供Microsoft Office应用程序。

#!/usr/bin/perl

use strict;
use warnings;

use FindBin qw( $Bin );
use File::Spec::Functions qw( catfile );

use Win32::OLE;
use Win32::OLE::Const 'Microsoft PowerPoint';
$Win32::OLE::Warn = 3;

my $ppt = get_ppt();
$ppt->{Visible} = 1;

my $ppt_file = catfile $Bin, 'test.ppt';
my $doc = $ppt->Presentations->open( $ppt_file );
my $slides = $doc->Slides;
my $num_slides = $slides->Count;

for my $slide_idx (1 .. $num_slides) {
    print "=== Begin Slide $slide_idx ===\n";

    my $slide = $doc->Slides->Item( $slide_idx );
    my $shapes = $slide->Shapes;
    my $num_shapes = $shapes->Count;

    for my $shape_idx (1 .. $num_shapes) {
        my $shape = $shapes->Item($shape_idx);
        next unless $shape->HasTextFrame;

        my $pars = $shape->TextFrame->TextRange->Paragraphs;
        my $num_pars = $pars->Count;
        for my $par_idx (1 .. $num_pars) {
            my $par = $pars->Paragraphs($par_idx,1);
            print_par( $par );
        }
    }

    print "=== End Slide $slide_idx ===\n\n";
}

sub print_par {
    my ($par) = @_;
    my @bullets = qw( - * > + = @ );

    my $bullet_format = $par->ParagraphFormat->Bullet;
    my $bullet_type = $bullet_format->Type;

    my $bullet_char = '';

    if ($bullet_type == ppBulletNumbered) {
        $bullet_char = $bullet_format->Number . "\t";
    }
    elsif( $bullet_type == ppBulletUnnumbered ) {
        # Need a Unicode => ASCII mapping if you want to use
        # $bullet_format->Character
        my $indent = $par->IndentLevel % scalar @bullets;
        $bullet_char = $bullets[$indent] . "\t";
    }

    my $text = $par->Text;
    $text =~ s/\s+$//;

    print $bullet_char, $text,"\n";
}

sub get_ppt {
    my $app;
    eval {
        $app = Win32::OLE->GetActiveObject('PowerPoint.Application');
    };

    die "$@\n" if $@;

    unless($app) {
        $app = Win32::OLE->new(
            'PowerPoint.Application', sub { $_[0]->Quit }
        ) or die "Oops, cannot start PowerPoint: ",
                 Win32::OLE->LastError, "\n";
    }
    return $app;
}

其他提示

它可以做Perl。很多东西,你可以做VBA可以做Perl通过Win32::OLE。我已经使用的Win32::OLE模块的工作MS-办公室的文件,这两个提取和创造内容。它已经一段时间,虽则。从这里开始, http://win32.perl.org/wiki/index.php?title=Win32_Perl_Modules 关于中间页。

VBA文件对每个对象是有用的参考,查找什么对象,有的方法和性能可用于他们。

风...你会很难在处理MS Office文件使用Perl,PHP或Java。当我不得不自动化MS Office文件,我最经常使用VBA(Visual Basic应用程序)。看看它。对于很多东西,你可以记录宏观,看看产生的代码和学习的东西是如何被引用。然后拍片的产生的代码,并创建自己的VBA模块和工具。我可以想象,这种功能可以完全适合作为加用于功率点。

是Visual Basic应用程序不适用于你吗?应该建立在到办公室,而因为你们要去办公室,办公室可能更加容易。

你可以用OpenOffice.org's演示应用程序(打动)进口的Powerpoint文件。你可以随后出口就在本地OpenOffice.org 格式,这是XML。然后你应该可以分析纯文本XML语言的选择。

正如其他人已经指出的,如果你想工作的Powerpoint格式的直接的,你真的需要使用微软的语言(VB,VBA,C#等等)。

我想你可能想看看程序转换从PPT CSV文件可能以PDF的中间?一旦数据是在CSV的格式,你可能能够处理它通过php/perl容易得多。

这样做的从头开始将是非常耗费时间,因为该办事处的文档格式是非常复杂。

如果你有Zend框架,它可以帮助很大。 看看这里 为有用的文件。 看看这里 写到excel文件。

这听起来很像我做什么工作,虽然我工作主要是在Excel和Word。你最好的选择就是利用VBA在PowerPoint要看看每一页,并找到的子弹。然后写信给一个文件在CSV格式,每个子弹在一个不同的线路,这将打开在Excel中,每个子弹对它自己的行中。

找到什么是子弹和什么是不可能的把戏。试图记录的一些宏选择,加入和删除的子弹,也许改变一些。这应该给你足够的信息,关于什么的对象是在寻找、并如何可以将它们的工作。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top