Pergunta

Pediram-me para automatizar uma determinada tarefa no trabalho hoje, que ocupa muito do nosso tempo! O seguinte é o que precisa ser feito e eu gostaria de receber qualquer ajuda sobre como eu posso fazer isso (Conselho de Implementação) dentro dos reinos de meu conhecimento, se possível.

Problema

Eu tenho um PowerPoint documento (.ppt). Gostaria de extrair o texto de lá (o texto está em formato de ponto de bala). Gostaria de inserir esses pontos balas em folha de um Excel , cada ponto de bala deve ser uma linha . Eu também gostaria de colocar na coluna adjacente a página este texto ponto de bala foi retirada de.

Então, basicamente:. Extrato de ppt -> Inserir em folha de Excel cada linha sendo um ponto de bala

Technologies disponível para me

Perl, PHP e Java.

eu preferem PHP para ser honesto, como esta é a minha primeira língua, mas estou feliz em considerar qualquer outra coisa que vocês / galões acha que é melhor. Segundo seria Perl e Java. Eu não quero ser a compilação de aulas e instalar o JDK apenas para! :)

Questões-chave

  • Como você faz referência a um ponto de bala?
  • Am I provável que acabe com apenas uma carga de texto não estruturado na folha de Excel?
  • Existem barreiras para a leitura de um arquivo ppt?

Atualização

Eu consideraria tecnologias MS (VB, etc.) se torna a vida mais fácil, mas eu nunca usei isso e eu desprezo tecnologia MS! Esperança eu não ficar inflamado pelos evangelistas! :)

Foi útil?

Solução

Aqui está um exemplo de script usando Win32 :: OLE .

A propósito, depois de ter convertido os slides em um formato que você pode processar, você pode usar Spreadsheet :: WriteExcel em sistemas não-MS para escrever a saída. Portanto, eu recomendo dois programas:. Um para transformar os documentos em PowerPoint e outro para gerar os arquivos do Excel

Note que uma excelente fonte de informação para aplicações do Microsoft Office é o localizador de objectos. Você pode acessá-lo através de Ferramentas ? Macro ? Visual Basic Editor. Uma vez que você estiver no editor, bateu F2 para percorrer as interfaces, métodos e propriedades fornecidas por aplicativos do 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;
}

Outras dicas

Pode ser feito com Perl. Praticamente qualquer coisa que você pode fazer com VBA pode ser feito com Perl via Win32 :: OLE. Eu usei o módulo Win32 :: OLE para trabalhar com documentos do MS-Office, tanto o conteúdo extrair e criar. Tem sido um tempo embora. Comece aqui, http://win32.perl.org/wiki/index.php ? title = Win32_Perl_Modules sobre o meio da página.

A documentação VBA em cada um dos objetos é útil para referência, encontrar o que os objetos existem e os métodos e propriedades disponíveis sobre eles.

Puh ... você vai ter um tempo difícil em lidar com arquivos do MS Office usando Perl, PHP ou Java. Quando eu tive que fazer a automação para arquivos MS Office que mais frequentemente usado VBA (Visual Basic for Applications). Dê uma olhada nisto. Para um monte de coisas que você pode simplesmente gravar uma macro, dê uma olhada no código produzido e aprender como as coisas estão sendo referenciado. Em seguida, tomar pedaços do código gerado e criar seus próprios módulos e ferramentas do VBA. Eu poderia imaginar que tal funcionalidade de um poderia se encaixar perfeitamente como um add-in para o Power Point.

É Visual Basic for Applications não está disponível para você? Isso deve ser incorporada no Office, e uma vez que você está indo Office-to-escritório pode ser mais fácil.

Você pode usar aplicativo de apresentação do OpenOffice.org (Impress) para importar o arquivo do PowerPoint. Você poderia, então exportá-lo no formato do OpenOffice.org nativa, que é XML. Você deve então ser capaz de analisar o XML de texto simples com o idioma de sua escolha.

Como outras pessoas têm apontado, se você quiser diretamente para o trabalho com o formato PowerPoint, você realmente precisa usar uma linguagem Microsoft (VB, VBA, C #, etc.).

Eu estou pensando que você pode querer olhar para programas que convertem a partir de PPT para um arquivo CSV possivelmente com PDF no meio? Uma vez que os dados estão no formato CSV, você pode ser capaz de processá-lo por php / perl muito mais facilmente.

Fazendo isso a partir do zero vai ser muito demorado, porque os formatos de documentos do Office são muito complicado em geral.

Se você tiver o Zend Framework disponível, ele pode ajudar consideravelmente. Veja aqui para documentação útil. Veja aqui para gravar em arquivos do Excel.

Isso soa muito parecido com o que eu faço no trabalho, embora eu trabalho principalmente em Excel e Word. Sua melhor aposta seria usar VBA no PowerPoint para olhar em cada página e encontrar as balas. Em seguida, escrever para um arquivo no formato CSV, cada bala em uma linha diferente, que será aberto no Excel, cada bala sobre a sua própria linha.

Encontrar o que é uma bala eo que não é pode ser truque. Tente gravar algumas macros selecionar, adicionar e excluir balas, e talvez mudar o nível de alguns. Isso deve dar-lhe informação suficiente sobre o que os objetos a serem procurando, e como eles podem ser trabalhado com.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top