Pregunta

¡Se me ha pedido que automatice una tarea particular en el trabajo hoy, que ocupa mucho tiempo! Lo siguiente es lo que debe hacerse y agradecería cualquier ayuda sobre cómo puedo hacer esto (Consejo de implementación) dentro de los ámbitos de mi conocimiento, si es posible.

Problema

Tengo un documento de PowerPoint (.ppt). Me gustaría extraer texto de allí (el texto está en formato de viñeta). Me gustaría insertar estos puntos de viñetas en una Excel , cada punto de viñeta debe ser una fila . También me gustaría poner en la columna adyacente la página de la que se tomó este texto de viñeta.

Entonces, básicamente: Extracto de ppt - > Inserte en la hoja de Excel cada fila como una viñeta.

Tecnologías disponibles para mí

Perl, PHP y Java.

Preferiría PHP para ser honesto, ya que este es mi idioma principal, pero estoy feliz de considerar cualquier otra cosa que ustedes / chicas piensen que es mejor. El segundo sería Perl y luego Java. ¡No quiero compilar clases e instalar JDK solo por esto! :)

Preguntas clave

  • ¿Cómo se hace referencia a una viñeta?
  • ¿Es probable que termine con solo una carga de texto no estructurado en la hoja de Excel?
  • ¿Hay alguna barrera para leer desde un archivo ppt?

Actualizar

¡Consideraría las tecnologías MS (VB, etc.) si me facilita la vida, pero nunca la he usado y desprecio la tecnología MS! ¡Espero no ser criticado por los evangelistas! :)

¿Fue útil?

Solución

Aquí hay un script de muestra que utiliza Win32 :: OLE .

Por cierto, una vez que haya convertido las diapositivas a un formato que pueda procesar, puede usar Hoja de cálculo :: WriteExcel en sistemas que no son MS para escribir la salida. Por lo tanto, recomendaría dos programas: uno para transformar los documentos de PowerPoint y otro para generar los archivos de Excel.

Tenga en cuenta que una excelente fuente de información para las aplicaciones de Microsoft Office es el Explorador de objetos. Puede acceder a través de Herramientas & # 8594; Macro & # 8594; Editor de Visual Basic. Una vez que esté en el editor, presione F2 para explorar las interfaces, métodos y propiedades proporcionadas por las aplicaciones de 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 { 

Aquí hay un script de muestra que utiliza Win32 :: OLE .

Por cierto, una vez que haya convertido las diapositivas a un formato que pueda procesar, puede usar Hoja de cálculo :: WriteExcel en sistemas que no son MS para escribir la salida. Por lo tanto, recomendaría dos programas: uno para transformar los documentos de PowerPoint y otro para generar los archivos de Excel.

Tenga en cuenta que una excelente fuente de información para las aplicaciones de Microsoft Office es el Explorador de objetos. Puede acceder a través de Herramientas & # 8594; Macro & # 8594; Editor de Visual Basic. Una vez que esté en el editor, presione F2 para explorar las interfaces, métodos y propiedades proporcionadas por las aplicaciones de Microsoft Office.

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

Otros consejos

Se puede hacer con Perl. Casi todo lo que puede hacer con VBA se puede hacer con Perl a través de Win32 :: OLE. He usado el módulo Win32 :: OLE para trabajar con documentos de MS-Office, extrayendo y creando contenido. Sin embargo, ha pasado un tiempo. Comience aquí, http://win32.perl.org/wiki/index.php ? title = Win32_Perl_Modules en el medio de la página.

La documentación de VBA sobre cada uno de los objetos es útil como referencia, para encontrar qué objetos hay y los métodos y propiedades disponibles en ellos.

Puh ... tendrás dificultades para lidiar con archivos de MS Office usando Perl, PHP o Java. Cuando tenía que automatizar los archivos de MS Office, solía usar VBA (Visual Basic para aplicaciones). Mira esto. Para muchas cosas, puede grabar una macro, echar un vistazo al código producido y aprender cómo se hace referencia a las cosas. Luego, tome partes del código generado y cree sus propios módulos y herramientas VBA. Me imagino que esa funcionalidad podría encajar perfectamente como un complemento para Power Point.

¿Visual Basic para aplicaciones no está disponible para usted? Eso debería estar integrado en Office, y dado que va de Office a Office, podría ser más fácil.

Puede usar la aplicación de presentación de OpenOffice.org (Impress) para importar el archivo de Powerpoint. Luego puede exportarlo en formato nativo de OpenOffice.org, que es XML. Debería poder analizar el XML de texto sin formato con el idioma que elija.

Como han señalado otras personas, si desea trabajar directamente con el formato de PowerPoint, realmente necesita usar un lenguaje de Microsoft (VB, VBA, C #, etc.).

¿Creo que es posible que desee buscar programas que conviertan de PPT a un archivo CSV posiblemente con PDF en el medio? Una vez que los datos están en formato CSV, es posible que pueda procesarlos con php / perl con mucha más facilidad.

Hacer esto desde cero requerirá mucho tiempo porque los formatos de documentos de Office son muy complicados en general.

Si tiene disponible Zend Framework, puede ayudarlo considerablemente. Ver aquí  para documentación útil Consulte aquí para escribir en archivos de Excel.

Esto se parece mucho a lo que hago en el trabajo, aunque trabajo principalmente en Excel y Word. Su mejor opción sería usar VBA en PowerPoint para mirar cada página y encontrar las viñetas. Luego escriba en un archivo en formato CSV, cada viñeta en una línea diferente, que se abrirá en Excel, cada viñeta en su propia fila.

Encontrar lo que es una bala y lo que no puede ser un truco. Intente grabar algunas macros seleccionando, agregando y eliminando viñetas, y tal vez cambiando el nivel de algunas. Eso debería darle suficiente información sobre qué objetos buscar y cómo se pueden trabajar.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top