職場でのジョブの自動化:PowerPoint箇条書きテキストをExcelシートにインポートする
-
06-07-2019 - |
質問
今日の仕事で特定のタスクを自動化するように依頼されましたが、これは多くの時間を費やしています!以下は何をする必要があるかであり、可能な場合、私の知識の範囲内でこれを行う方法(実装アドバイス)についての助けをいただければ幸いです。
問題
PowerPoint ドキュメント(.ppt)があります。そこからテキストを抽出したいと思います(テキストは箇条書き形式です)。これらの箇条書きを Excel シートに挿入します。各箇条書きは行である必要があります。また、この箇条書きのテキストが取得されたページを隣接する列に配置したいと思います。
つまり、基本的にはpptからの抽出->行を箇条書きにする各行をExcelシートに挿入します。
利用可能な技術
Perl、PHP、およびJava。
正直に言うと PHPを好む。これは私の第一言語ですが、皆さんや他のギャルが最高だと思うものは何でも検討できてうれしいです。 2つ目はPerl、次にJavaです。これだけのためにクラスをコンパイルしてJDKをインストールしたくありません! :)
重要な質問
- 箇条書きの参照方法
- Excelシートに構造化されていないテキストがたまるだけで終わるのでしょうか?
- pptファイルからの読み取りに障壁はありますか?
更新
MSテクノロジー(VBなど)が生活を楽にするなら、私はそれを検討しますが、私はそれを使ったことがなく、MSテクノロジーを軽deしています!私は伝道者にflameられないことを願っています! :)
解決
Win32 :: OLE を使用したサンプルスクリプトです。
ところで、スライドを処理可能な形式に変換したら、 MS以外のシステムでは、スプレッドシート:: WriteExcel で出力を書き込みます。したがって、2つのプログラムをお勧めします。1つはPowerPointドキュメントを変換し、もう1つはExcelファイルを生成します。
Microsoft Officeアプリケーションの優れた情報源はオブジェクトブラウザです。ツールからアクセスできます→マクロ→ Visual Basic Editor。エディターに入ったら、 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 { Win32 :: OLE を使用したサンプルスクリプトです。
ところで、スライドを処理可能な形式に変換したら、 MS以外のシステムでは、スプレッドシート:: WriteExcel で出力を書き込みます。したがって、2つのプログラムをお勧めします。1つはPowerPointドキュメントを変換し、もう1つはExcelファイルを生成します。
Microsoft Officeアプリケーションの優れた情報源はオブジェクトブラウザです。ツールからアクセスできます→マクロ→ Visual Basic Editor。エディターに入ったら、 F2 を押して、Microsoft Officeアプリケーションが提供するインターフェイス、メソッド、およびプロパティを参照します。
<*>[0]->Quit }
) or die "Oops, cannot start PowerPoint: ",
Win32::OLE->LastError, "\n";
}
return $app;
}
他のヒント
Perlで実行できます。 VBAでできることのほとんどは、Win32 :: OLEを介してPerlで実行できます。 Win32 :: OLEモジュールを使用して、コンテンツの抽出と作成の両方でMS-Officeドキュメントを操作しました。でもしばらく経ちました。ここから開始、 http://win32.perl.org/wiki/index.php ?title = Win32_Perl_Modules ページの中央について。
各オブジェクトに関するVBAのドキュメントは、参照、存在するオブジェクト、およびそれらで利用可能なメソッドとプロパティの検索に役立ちます。
Puh ... Perl、PHP、またはJavaを使用してMS Officeファイルを処理するのは困難です。 MS Officeファイルの自動化を行う必要があったとき、私はほとんどの場合VBA(Visual Basic for Applications)を使用しました。それを見てください。多くのものについては、マクロを記録し、生成されたコードを見て、物事がどのように参照されているかを学ぶことができます。次に、生成されたコードの一部を取り、独自のVBAモジュールとツールを作成します。このような機能は、Power Pointのアドインとして完全に適合すると想像できました。
Visual Basic for Applicationsは利用できませんか?これはOfficeに組み込まれている必要があり、OfficeからOfficeに移行するので簡単かもしれません。
OpenOffice.orgのプレゼンテーションアプリ(Impress)を使用して、Powerpointファイルをインポートできます。次に、ネイティブOpenOffice.org形式(XML)でエクスポートできます。これで、選択した言語でプレーンテキストXMLを解析できるようになります。
他の人が指摘しているように、Powerpoint形式を直接操作する場合は、Microsoft言語(VB、VBA、C#など)を使用する必要があります。
PPTからCSVファイルに変換するプログラムを調べたいと思うかもしれません。データがCSV形式になったら、php / perlでより簡単に処理できるようになる場合があります。
Officeドキュメント形式は一般に非常に複雑であるため、これを最初から行うのは非常に時間がかかります。
これは私が仕事で行っていることとよく似ていますが、ほとんどはExcelとWordで作業しています。最善の策は、PowerPointでVBAを使用して各ページを調べ、箇条書きを見つけることです。次に、CSV形式のファイルに書き込みます。各行は異なる行にあり、Excelで開きます。行頭の行はそれぞれ独自の行になります。
何が弾丸で何が弾丸ではないかを見つけるのは難しいかもしれません。箇条書きを選択、追加、削除し、いくつかのマクロのレベルを変更するマクロをいくつか記録してみてください。これにより、探しているオブジェクトとそれらの操作方法に関する十分な情報が得られます。