İş bir İş otomatikleştirme: bir Excel Sheet içine Powerpoint Bullet Metin İçe

7 Cevap java

Ben çok zaman alır ki bugün işte belirli bir görevi otomatikleştirmek için istendi! Aşağıdaki yapılması ve mümkünse ben, benim bilgi alemlerine içinde ben bunu nasıl yapabilirim herhangi bir yardım (Uygulama Önerileri) seviniriz ihtiyacı budur.

Problem

Ben bir PowerPoint belgesi (. Ppt) var. Ben (metin madde işareti noktası formatında) oradan metin ayıklamak istiyorum. Ben her madde işareti bir satır olmalı, bir Excel levha içine bu mermi noktaları eklemek istiyorum. Ben de bitişik sütunda bu madde puntoluk metin alınmıştır sayfası koymak istiyorum.

Yani, temelde: ppt Özü -> Bir mermi noktası olmanın Excel sayfası içine her satırı yerleştirin.

Technologies available to me

Perl, PHP ve Java.

Bu benim birincil dil olarak ben prefer PHP Dürüst olmak isterdim, ama siz / gals düşündüğünüz başka bir şey iyi düşünün için mutluyum. İkinci Perl ve sonra Java olacaktır. Ben sınıfları derleme ve sadece bunun için JDK yüklemeden olmak istemiyorum! :)

Key Questions

  • Nasıl bir kurşun nokta başvuru?
  • Ben Excel sayfasında yapılandırılmamış metin sadece bir yük ile sona olasılıkla miyim?
  • Ppt dosyası okuma için herhangi bir engel var mı?

Update

O hayatı kolaylaştırır MS teknolojileri (VB, vb) dikkate alacağını ama asla kullanılmış ve MS teknolojisi hor! Ben misyonerleri tarafından yakılmış alamadım umut! :)

7 Cevap

İşte Win32::OLE kullanarak örnek bir betik.

Eğer işleyebilir bir biçime slaytlar çevirdim kez arada, size çıktı yazmak için MS olmayan sistemlerde Spreadsheet::WriteExcel kullanabilirsiniz. Bu nedenle, iki program tavsiye ederim: Bir Excel dosyaları oluşturmak için PowerPoint belgelerini ve başka bir dönüşümü.

Microsoft Office uygulamaları için mükemmel bir bilgi kaynağı Nesne Tarayıcısı olduğunu unutmayın. Sen Araçlar üzerinden erişebilirsiniz → Makro → Visual Basic Editör. Eğer editörü kez, F2 arabirimleri, yöntemleri ve Microsoft Office uygulamaları tarafından sağlanan özelliklerini göz çarptı.

#!/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 ile yapılabilir. VBA ile yapabileceğiniz çok fazla bir şey Win32 :: OLE ile Perl ile yapılabilir. Ben ayıklanması ve içerik oluşturma, hem de MS-Office belgeleri ile çalışmak için Win32 :: OLE modülü kullandım. Ama olmadı. Sayfanın ortasında hakkında, http://win32.perl.org/wiki/index.php?title=Win32_Perl_Modules Buradan başlayın.

Nesnelerin her biri VBA belgeleri onlara mevcut yöntemleri ve özellikleri vardır ve ne nesneleri bulmak, referans için yararlıdır.

Puh ... Perl, PHP veya Java kullanarak MS Office dosyaları ile uğraşan bir sabit zaman var olacak. MS Office dosyaları için otomasyon yapmak zorunda olduğunda en sık VBA (Visual Basic for Applications) kullanılır. Ona bir göz atın. Bir sürü şey için sadece bir makro kaydetmek üretilen koda bir göz atın ve işler başvurulan ediliyor öğrenebilirsiniz. Sonra oluşturulan kod parçaları almak ve kendi VBA modülleri ve araçları oluşturmak. Ben düşünebiliriz böyle bir işlevi olabilir Power Point için bir eklenti olarak mükemmel uyum.

Sizin için mevcut değil Applications Visual Basic mi? Bu Office-inşa edilmesi gerektiğini, ve Office-to-Office'in gidiyoruz çünkü daha kolay olabilir.

Sen Powerpoint dosyasını almak için, OpenOffice.org 'un sunum uygulaması (Impress) kullanabilirsiniz. Daha sonra XML yerli OpenOffice.org formatında ihraç olabilir. Daha sonra seçtiğiniz dili ile düz metin XML ayrıştırmak gerekir.

Diğer insanların işaret ettiğimiz gibi doğrudan Powerpoint biçimi ile çalışmak istiyorsanız, gerçekten bir Microsoft dili (VB, VBA, C #, vb) kullanmanız gerekir.

Ben ortada PDF ile muhtemelen bir CSV dosyası PPT dönüştürmek programlarına içine bakmak isteyebilirsiniz düşünüyorum? Veri CSV formatında sonra, çok daha kolay php / perl ile işlemek mümkün olabilir.

Office belge biçimleri genel olarak çok karmaşık çünkü sıfırdan bu yapmak çok zaman alıcı olacaktır.

Ben Excel ve Word çoğunlukla işe rağmen bu, ben işte ne gibi bir çok geliyor. Yapabileceğiniz en iyi şey, her sayfası bakmak ve mermi bulmak için PowerPoint kullanımı VBA olacaktır. Sonra kendi satırında Excel her kurşunla açılacak CSV formatında, farklı bir hat üzerinde her mermi, bir dosyaya yazmak.

Bir mermi ne bulma ve ne değildir hile olabilir. Bazı makro seçerek kayıt mermi ekleme ve silme, ve belki birkaç düzeyini değiştirmeyi deneyin. Bu size arıyor olması ne nesneleri hakkında yeterli bilgi vermek, ve onlar ile çalışmış olabilir nasıl olmalıdır.