Automatizzare un lavoro sul posto di lavoro: importazione di testo proiettile Powerpoint in un foglio Excel

StackOverflow https://stackoverflow.com/questions/1214452

Domanda

Oggi mi è stato chiesto di automatizzare un particolare compito sul lavoro che occupa molto del nostro tempo! Quello che segue è ciò che deve essere fatto e apprezzerei qualsiasi aiuto su come posso fare questo (Consigli per l'implementazione) nell'ambito delle mie conoscenze, se possibile.

Problema

Ho un PowerPoint (.ppt). Vorrei estrarre il testo da lì (il testo è in formato punto elenco). Vorrei inserire questi punti elenco in un Excel , ogni punto elenco dovrebbe essere una riga . Vorrei anche inserire nella colonna adiacente la pagina da cui è stato tratto questo testo puntato.

Quindi, in sostanza: Estrai da ppt - > Inserisci nel foglio Excel ogni riga essendo un punto elenco.

Tecnologie a mia disposizione

Perl, PHP e Java.

Preferirei preferire PHP in quanto questa è la mia lingua principale, ma sono felice di considerare qualsiasi altra cosa che voi / ragazze pensiate sia la migliore. Il secondo sarebbe Perl e poi Java. Non voglio compilare classi e installare JDK solo per questo! :)

Domande chiave

  • Come si fa riferimento a un punto elenco?
  • È probabile che finisca con solo un carico di testo non strutturato nel foglio Excel?
  • Ci sono ostacoli alla lettura da un file ppt?

Aggiornamento

Vorrei prendere in considerazione le tecnologie MS (VB, ecc.) se semplifica la vita, ma non l'ho mai usata e disprezzo la tecnologia MS! Spero di non essere infiammato dagli evangelisti! :)

È stato utile?

Soluzione

Ecco uno script di esempio che utilizza Win32 :: OLE .

A proposito, una volta convertite le diapositive in un formato che puoi elaborare, puoi usare Spreadsheet :: WriteExcel su sistemi non MS per scrivere l'output. Pertanto, consiglierei due programmi: uno per trasformare i documenti di PowerPoint e un altro per generare i file Excel.

Si noti che un'eccellente fonte di informazioni per le applicazioni di Microsoft Office è l'Object Browser. Puoi accedervi tramite Strumenti & # 8594; Macro & # 8594; Editor di Visual Basic. Una volta che sei nell'editor, premi F2 per sfogliare le interfacce, i metodi e le proprietà fornite dalle applicazioni di 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 { 

Ecco uno script di esempio che utilizza Win32 :: OLE .

A proposito, una volta convertite le diapositive in un formato che puoi elaborare, puoi usare Spreadsheet :: WriteExcel su sistemi non MS per scrivere l'output. Pertanto, consiglierei due programmi: uno per trasformare i documenti di PowerPoint e un altro per generare i file Excel.

Si noti che un'eccellente fonte di informazioni per le applicazioni di Microsoft Office è l'Object Browser. Puoi accedervi tramite Strumenti & # 8594; Macro & # 8594; Editor di Visual Basic. Una volta che sei nell'editor, premi F2 per sfogliare le interfacce, i metodi e le proprietà fornite dalle applicazioni di Microsoft Office.

<*>[0]->Quit } ) or die "Oops, cannot start PowerPoint: ", Win32::OLE->LastError, "\n"; } return $app; }

Altri suggerimenti

Può essere fatto con Perl. Praticamente tutto ciò che puoi fare con VBA può essere fatto con Perl tramite Win32 :: OLE. Ho usato il modulo Win32 :: OLE per lavorare con documenti MS-Office, sia estraendo che creando contenuti. È passato del tempo però. Inizia qui, http://win32.perl.org/wiki/index.php ? title = Win32_Perl_Modules nella parte centrale della pagina.

La documentazione VBA su ciascuno degli oggetti è utile come riferimento, trovando quali oggetti ci sono e i metodi e le proprietà disponibili su di essi.

Puh ... avrai difficoltà a gestire i file MS Office usando Perl, PHP o Java. Quando dovevo fare l'automazione per i file MS Office, il più delle volte usavo VBA (Visual Basic, Applications Edition). Dai un'occhiata. Per molte cose puoi semplicemente registrare una macro, dare un'occhiata al codice prodotto e imparare come vengono referenziate le cose. Quindi prendi pezzi del codice generato e crea i tuoi moduli e strumenti VBA. Potrei immaginare che una tale funzionalità potrebbe adattarsi perfettamente come un componente aggiuntivo per Power Point.

Visual Basic, Applications Edition non è disponibile per te? Dovrebbe essere integrato in Office e dal momento che stai andando da Office a Office potrebbe essere più facile.

È possibile utilizzare l'app di presentazione di OpenOffice.org (Impress) per importare il file Powerpoint. È quindi possibile esportarlo nel formato nativo di OpenOffice.org, che è XML. Dovresti quindi essere in grado di analizzare l'XML in testo semplice con la lingua che preferisci.

Come altri hanno sottolineato, se si desidera lavorare direttamente con il formato Powerpoint, è necessario utilizzare un linguaggio Microsoft (VB, VBA, C #, ecc.).

Sto pensando che potresti voler esaminare i programmi che convertono da PPT in un file CSV possibilmente con PDF nel mezzo? Una volta che i dati sono in formato CSV, potresti essere in grado di elaborarli con php / perl molto più facilmente.

Farlo da zero richiederà molto tempo perché i formati dei documenti di Office sono molto complicati in generale.

Se hai Zend Framework disponibile, può essere di grande aiuto. Vedi qui  per una documentazione utile. Vedi qui per scrivere su file Excel.

Sembra molto simile a quello che faccio al lavoro, anche se lavoro principalmente in Excel e Word. La tua scommessa migliore sarebbe usare VBA in PowerPoint per guardare ogni pagina e trovare i punti elenco. Quindi scrivi in ??un file in formato CSV, ogni punto elenco su una riga diversa, che si aprirà in Excel, ogni punto elenco sulla sua riga.

Trovare ciò che è un proiettile e ciò che non lo è potrebbe essere un trucco. Prova a registrare alcune macro selezionando, aggiungendo ed eliminando i punti elenco e magari modificando il livello di alcuni. Questo dovrebbe darti abbastanza informazioni su quali oggetti cercare e su come lavorarli.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top