4

今日の仕事で特定のタスクを自動化するように依頼されましたが、これには多くの時間がかかります。以下は、実行する必要があることです。可能であれば、私の知識の範囲内でこれを実行する方法(実装アドバイス)についての助けをいただければ幸いです。

問題

PowerPointドキュメント(.ppt)があります。そこからテキストを抽出したいと思います(テキストは箇条書き形式です)。これらの箇条書きをExcelシートに挿入したいのですが、各箇条書きは行である必要があります。また、この箇条書きのテキストが引用されたページを隣の列に入れたいと思います。

つまり、基本的には次のようになります。pptから抽出->各行が箇条書きであるExcelシートに挿入します。

私が利用できるテクノロジー

Perl、PHP、Java。

私はPHPが私の第一言語であるため、正直に言うことを望みますが、皆さん/ギャルが最善だと思う他の言語を検討できてうれしいです。2番目はPerl、次にJavaです。このためだけにクラスをコンパイルしてJDKをインストールしたくありません。:)

重要な質問

  • 箇条書きをどのように参照しますか?
  • Excelシートに構造化されていないテキストが大量に表示される可能性がありますか?
  • pptファイルから読み取ることへの障壁はありますか?

アップデート

生活が楽になればMSテクノロジー(VBなど)を検討したいと思いますが、一度も使ったことがなく、MSテクノロジーを軽蔑しています!私が伝道者たちに火をつけられないことを願っています!:)

4

8 に答える 8

8

Perlでできます。VBA でできることのほとんどは、Win32::OLE を介して Perl で行うことができます。私は Win32::OLE モジュールを使用して、コンテンツの抽出と作成の両方で MS-Office ドキュメントを操作しました。しばらく経ちましたが。http://win32.perl.org/wiki/index.php?title=Win32_Perl_Modulesのページの中ほどから始めてください。

各オブジェクトの VBA ドキュメントは参照に役立ち、どのオブジェクトがあるか、それらで使用できるメソッドとプロパティを見つけることができます。

于 2009-07-31T20:17:46.833 に答える
7

うーん... Perl、PHP、または Java を使用して MS Office ファイルを扱うのは難しいでしょう。MS Office ファイルの自動化を行う必要があったときは、ほとんどの場合、VBA (Visual Basic for Applications) を使用しました。それを見てください。多くの場合、マクロを記録するだけで、生成されたコードを見て、どのように参照されているかを知ることができます。次に、生成されたコードの一部を取得して、独自の VBA モジュールとツールを作成します。このような機能は、Power Point のアドインとして完全に適合すると想像できました。

于 2009-07-31T19:37:37.557 に答える
7

Win32::OLEを使用したサンプル スクリプトを次に示します。

ところで、スライドを処理可能な形式に変換したら、 MS 以外のシステムでSpreadsheet::WriteExcelを使用して出力を書き込むことができます。したがって、2 つのプログラムをお勧めします。1 つは PowerPoint ドキュメントを変換するプログラム、もう 1 つは Excel ファイルを生成するプログラムです。

オブジェクト ブラウザは、Microsoft Office アプリケーションの優れた情報源です。Tools → Macro → Visual Basic Editor からアクセスできます。エディターに入ったら、F2Microsoft 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;
}
于 2009-07-31T23:25:08.517 に答える
1

私は主に Excel と Word で作業していますが、これは私が仕事で行っていることとよく似ています。最善の策は、PowerPoint で VBA を使用して各ページを調べ、箇条書きを見つけることです。次に、CSV 形式でファイルに書き込みます。各箇条書きは異なる行にあり、Excel で開きます。各箇条書きはそれぞれの行にあります。

弾丸とそうでないものを見つけるのは難しいかもしれません。いくつかのマクロを記録して、箇条書きの選択、追加、削除、およびいくつかのレベルの変更を試してみてください。これにより、探しているオブジェクトと、それらをどのように操作できるかについての十分な情報が得られるはずです。

于 2009-07-31T20:03:09.843 に答える
1

Visual Basic for Applications は利用できませんか? これは Office に組み込まれている必要があり、Office から Office に移動するので、より簡単になる可能性があります。

于 2009-07-31T19:37:27.727 に答える
1

OpenOffice.org のプレゼンテーション アプリ (Impress) を使用して、Powerpoint ファイルをインポートできます。その後、XML であるネイティブの OpenOffice.org 形式でエクスポートできます。その後、選択した言語でプレーンテキスト XML を解析できるはずです。

他の人が指摘しているように、Powerpoint 形式を直接操作したい場合は、Microsoft 言語 (VB、VBA、C# など) を使用する必要があります。

于 2009-07-31T19:39:27.317 に答える
1

PPT から CSV ファイルに変換し、PDF が途中にある可能性があるプログラムを調べてみてはいかがでしょうか。データが CSV 形式になると、php/perl でより簡単に処理できる場合があります。

Office ドキュメントの形式は一般的に非常に複雑であるため、これを最初から行うには非常に時間がかかります。

于 2009-07-31T19:39:44.227 に答える
1

Zend Framework を利用できる場合は、かなり役に立ちます。 役立つドキュメントについては、こちらを参照してください。エクセルファイルへの書き込みについてはこちらをご覧ください。

于 2009-07-31T19:46:44.853 に答える