Автоматизация работы на работе:Импорт текста маркера Powerpoint в лист Excel
-
06-07-2019 - |
Вопрос
Сегодня меня попросили автоматизировать определенную задачу на работе, которая отнимает у нас много времени!Ниже описано, что необходимо сделать, и я был бы признателен за любую помощь в том, как я могу это сделать (советы по внедрению) в пределах моих знаний, если это возможно.
Проблема
у меня есть Силовая установка документ (.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, каждый маркер в отдельной строке.
Выяснить, что является пулей, а что нет, может быть непросто.Попробуйте записать несколько макросов, выбирая, добавляя и удаляя маркеры и, возможно, изменяя уровень некоторых из них.Это должно дать вам достаточно информации о том, какие объекты нужно искать и как с ними можно работать.