工作中的自动化作业:导入简报子弹文本到Excel工作表(Automating a Job at Wo

2019-07-31 05:37发布

我一直在问自动化今天工作的特定任务,占用了大量的我们的时间! 下面是什么需要做,我将不胜感激我怎么能如果可能的话我的知识的领域内做到这一点(实施意见),任何帮助。

问题

我有一个PowerPoint演示文档(.PPT)。 我想从那里提取文本(文本为圆点格式)。 我想插入这些子弹指向到一个Excel的片,每颗子弹点应该是一排。 我也希望把在相邻列这个项目符号的文本是取自页面。

所以,基本上是:从PPT提取物 - >插入Excel工作表中的每一行是一个圆点。

提供给我技术

的Perl,PHP和Java。

宁愿PHP是诚实的,因为这是我的主要语言,但我很乐意考虑别的你们/加仑认为是最好的。 二是Perl和那么Java。 我不希望编译类和这只是安装JDK! :)

关键问题

  • 你如何引用子弹呢?
  • 难道我可能只是一个在Excel工作表非结构化文本的负载结束?
  • 是否有从PPT文件中读取任何障碍?

更新

我会考虑MS技术(VB等),如果它使生活更轻松,但我从来没有使用过它,我鄙视MS技术! 希望我不要被传道好看的! :)

Answer 1:

下面是一个使用示例脚本的Win32 :: OLE 。

顺便说一句,一旦你转换的滑入你可以处理的格式,你可以使用电子表格:: WriteExcel非MS系统将输出写入。 因此,我建议两个方案:一是改造PowerPoint文档,另一个用来生成Excel文件。

请注意,Microsoft Office应用程序信息的极好来源为对象浏览器。 您可以通过工具访问→宏→Visual Basic编辑器。 一旦你在编辑器中,点击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;
}


Answer 2:

它可以用Perl来完成。 相当多的东西,你可以用VBA做可以用Perl通过的Win32 :: OLE来完成。 我用的Win32 :: OLE模块,MS-Office文档,无论是提取和创建内容合作。 它已经一段时间,但。 从这里开始, http://win32.perl.org/wiki/index.php?title=Win32_Perl_Modules关于页面的中间。

在每个对象的VBA文档是有用的参考,发现有什么对象以及它们提供的方法和属性。



Answer 3:

PUH ......你必须在处理使用Perl,PHP或Java的MS Office文件之苦。 当我必须为MS Office文件做自动化我最常使用VBA(Visual Basic应用程序)。 看看它。 对于很多东西,你可以录制宏,看看所产生的代码,并了解事情是如何被引用。 然后把生成的代码片段,并创建自己的VBA模块和工具。 我能想象,这样的功能可以完全适合作为一个外接的电源点。



Answer 4:

是你无法使用应用程序的Visual Basic? 这应该是内置到Office,因为你要去办公室到办公室可能更容易。



Answer 5:

你可以使用OpenOffice.org的演示应用程序(Impress的)导入PowerPoint文件。 然后,您可以导出为原始的OpenOffice.org格式,它是XML。 然后,您应该能够与您所选择的语言来解析纯文本XML。

正如其他人所指出的,如果您想直接与PowerPoint档案工作,你真的需要使用Microsoft语言(VB,VBA,C#等)。



Answer 6:

我想你可能想看看,从PPT转换成CSV文件可能在中间PDF程序? 一旦数据是CSV格式,你可以通过PHP / Perl中更容易对其进行处理。

从头开始这样做将是非常耗时,因为Office文档格式一般很复杂。



Answer 7:

如果你有Zend框架可用,它可以大大帮助。 看到这里有帮助的文档。 看到这里用于写入Excel文件。



Answer 8:

这听起来很像是我在工作中做什么,尽管我在Excel和Word大多工作。 你最好的选择是使用VBA在PowerPoint看着每一页,找到子弹。 然后写入到CSV格式的文件,在另一条线路每一颗子弹,这将在Excel中,在它自己的行每发子弹打开。

寻找什么是子弹,什么不是可能的把戏。 尝试记录一些宏选择,添加和删除子弹,也许改变一些的水平。 这应该给你足够的信息了解哪些对象是在寻找,以及他们如何可以与合作。



文章来源: Automating a Job at Work: Importing Powerpoint Bullet Text into an Excel Sheet