Меня попросили сегодня автоматизировать конкретную задачу, которая занимает много времени! Следующее – это то, что нужно сделать, и я был бы признателен за любую помощь в том, как я могу это сделать (рекомендации по внедрению) в рамках моих знаний, если это возможно.
У меня есть документ PowerPoint (.ppt). Я хотел бы извлечь текст оттуда (текст в формате маркеров). Я хотел бы вставить эти точки маркеров в лист Excel , каждая маркерная точка должна быть рядом. Я также хотел бы поместить в соседний столбец страницу, на которой был напечатан этот текст точки пули.
Итак, в основном: Извлечь из ppt -> Вставить в лист Excel каждую строку, являющуюся точкой маркера.
Perl, PHP и Java.
Я бы предпочел, чтобы PHP был честным, поскольку это мой основной язык, но я рад рассмотреть все, что вы, ребята / галы, лучше всего думаете. Второй – Perl, а затем Java. Я не хочу собирать классы и устанавливать JDK именно для этого! 🙂
Я бы рассмотрел технологии MS (VB и т. Д.), Если это облегчит жизнь, но я никогда не использовал ее, и я презираю технологию MS! Надеюсь, мои евангелисты не горят! 🙂
Вот пример скрипта с использованием Win32 :: OLE .
Кстати, как только вы конвертируете слайды в формат, который вы можете обработать, вы можете использовать Spreadsheet :: WriteExcel для не-MS-систем для записи вывода. Поэтому я бы рекомендовал две программы: один для преобразования документов PowerPoint и другой для генерации файлов Excel.
Обратите внимание, что отличным источником информации для приложений Microsoft Office является Object Browser. Вы можете получить доступ к нему через Инструменты → Макро → Редактор Visual Basic. После того, как вы находитесь в редакторе, нажмите F2, чтобы просмотреть интерфейсы, методы и свойства, предоставляемые приложениями 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, и поскольку вы собираетесь работать с Office-to-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, каждая пуля на собственной строке.
Поиск того, что такое пуля, а что нет, может быть трюком. Попробуйте записать некоторые макросы, которые выбирают, добавляют и удаляют пули и, возможно, меняют уровень нескольких. Это должно дать вам достаточно информации о том, какие объекты нужно искать и как с ними можно работать.