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

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

проблема

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

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

Технологии, доступные мне

Perl, PHP и Java.

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

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

  • Как вы ссылаетесь на маркер?
  • Возможно ли, что в конечном итоге вы получите просто неструктурированный текст в листе Excel?
  • Существуют ли какие-либо препятствия для чтения из файла ppt?

Обновить

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

Solutions Collecting From Web of "Автоматизация работы на рабочем месте: импорт текста пули PowerPoint в лист Excel"

Вот пример скрипта с использованием 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, каждая пуля на собственной строке.

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