Автоматизация работы на работе:Импорт текста маркера Powerpoint в лист Excel

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

Вопрос

Сегодня меня попросили автоматизировать определенную задачу на работе, которая отнимает у нас много времени!Ниже описано, что необходимо сделать, и я был бы признателен за любую помощь в том, как я могу это сделать (советы по внедрению) в пределах моих знаний, если это возможно.

Проблема

у меня есть Силовая установка документ (.ppt).Я хотел бы извлечь оттуда текст (текст в формате маркированного списка).Я хотел бы вставить эти пункты в Эксель листе каждый пункт маркированного списка должен быть строкой.Я также хотел бы поместить в соседний столбец страницу, с которой был взят текст этого пункта.

Итак, в основном:Извлечение из ppt -> Вставьте в лист Excel каждую строку, являющуюся маркером.

Доступные мне технологии

Перл, PHP и Java.

Я бы предпочитаю PHP честно говоря, это мой основной язык, но я рад рассмотреть что-нибудь еще, что вы, ребята/девочки, считаете лучшим.Вторым будет Perl, а затем Java.Я не хочу компилировать классы и устанавливать JDK только ради этого!:)

Ключевые вопросы

  • Как вы ссылаетесь на пункт списка?
  • Могу ли я получить на листе Excel лишь кучу неструктурированного текста?
  • Есть ли какие-либо препятствия для чтения файла ppt?

Обновлять

Я бы рассмотрел технологии MS (VB и т. д.), если это облегчит жизнь, но я никогда ими не пользовался и ненавижу технологию MS!Надеюсь, меня не рассердят евангелисты!:)

Это было полезно?

Решение

Вот пример сценария, использующего Win32::OLE.

Кстати, как только вы преобразуете слайды в формат, который можно обрабатывать, вы можете использовать Электронная таблица::WriteExcel в системах, отличных от MS, для записи вывода.Поэтому я бы рекомендовал две программы:Один для преобразования документов PowerPoint, а другой для создания файлов Excel.

Обратите внимание, что отличным источником информации о приложениях Microsoft Office является Обозреватель объектов.Доступ к нему можно получить через Инструменты → Макросы → Редактор Visual Basic.Как только вы окажетесь в редакторе, нажмите Ф2 для просмотра интерфейсов, методов и свойств, предоставляемых приложениями 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;
}

Другие советы

Это можно сделать с помощью Perl.Практически все, что вы можете сделать с помощью VBA, можно сделать с помощью Perl через Win32::OLE.Я использовал модуль Win32::OLE для работы с документами MS-Office, как для извлечения, так и для создания контента.Хотя прошло уже много времени.Начало здесь, http://win32.perl.org/wiki/index.php?title=Win32_Perl_Modules примерно в середине страницы.

Документация VBA по каждому из объектов полезна для справки, позволяющей узнать, какие объекты существуют, а также доступные для них методы и свойства.

Ух... вам будет сложно работать с файлами MS Office с использованием Perl, PHP или Java.Когда мне приходилось автоматизировать файлы MS Office, я чаще всего использовал VBA (Visual Basic для приложений).Взгляните на это.Для многих вещей вы можете просто записать макрос, просмотреть созданный код и узнать, как на что-то ссылаются.Затем возьмите фрагменты сгенерированного кода и создайте свои собственные модули и инструменты VBA.Я мог себе представить, что такая функциональность идеально подойдет в качестве надстройки для Power Point.

Visual Basic для приложений вам недоступен?Это должно быть встроено в Office, и, поскольку вы переходите из офиса в офис, это может быть проще.

Вы можете использовать приложение для презентаций OpenOffice.org (Impress) для импорта файла Powerpoint.Затем вы можете экспортировать его в собственный формат OpenOffice.org, то есть XML.После этого вы сможете анализировать простой текстовый XML на выбранном вами языке.

Как отмечали другие люди, если вы хотите напрямую работать с форматом Powerpoint, вам действительно нужно использовать язык Microsoft (VB, VBA, C# и т. д.).

Я думаю, вы, возможно, захотите изучить программы, которые конвертируют файлы PPT в файлы CSV, возможно, с PDF посередине?Как только данные будут в формате CSV, вам будет гораздо проще обрабатывать их с помощью php/perl.

Выполнение этого с нуля займет очень много времени, поскольку форматы документов Office в целом очень сложны.

Если у вас есть Zend Framework, это может значительно помочь. Глянь сюдаза полезную документацию. Глянь сюда для записи в Excel файлов.

Это очень похоже на то, чем я занимаюсь на работе, хотя я работаю в основном в Excel и Word.Лучше всего использовать VBA в PowerPoint, чтобы просмотреть каждую страницу и найти маркеры.Затем напишите в файл в формате CSV, каждый маркер в отдельной строке, который откроется в Excel, каждый маркер в отдельной строке.

Выяснить, что является пулей, а что нет, может быть непросто.Попробуйте записать несколько макросов, выбирая, добавляя и удаляя маркеры и, возможно, изменяя уровень некоторых из них.Это должно дать вам достаточно информации о том, какие объекты нужно искать и как с ними можно работать.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top