Newsgroup: it.comp.lang.perl
Titolo: TROVARE I BOOKMARK DI WORD con PERL

Ho realizzato un applicazione in PERL che apre un documento word e
compie su di esso delle operazioni sfruttanto le stesse macro di word.
Il procedimento e' quello di registrare le macro di Word e poi
trasformarle in codice PERL.
Non riesco pero' a trasformare il codice generato dalla macro per
l'individuazione di un particolare Bookmarks all'interno di un
documento.
 Il codice generato da word e' il seguente:
 Selection.GoTo What:=wdGoToBookmark, Name:="miobookmarck"
 come posso trasformarlo in PERL ?
Grazie 1000!

  come posso trasformarlo in PERL ?
Intendi come trasformarlo in codice Perl usando Win32::OLE ?
Non ho ben capito.

 Selection.GoTo What:=wdGoToBookmark, Name:="miobookmarck"
Dal momento che la sintassi posizionale del metodo è:
     espressione.GoTo(What, Which, Count, Name)
     espressione   Obbligatoria. Espressione che restituisce un oggetto
                   Document, Range o Selection.  
credo che tu possa tranquillamente scrivere:
 
    $selezione->GoTo(wdGotoBookmark, undef, undef, "miobookmark");
E' possibile comunque anche usare gli argomenti nominali, passando il
reference ad un hash.
Quindi, direi che qualcosa come:
 
    $selezione->Goto({ What => wdGotoBookmark, Name => "miobookmark" });
*potrebbe* anche, forsemagaripuòdarsi, funzionare.
Ciao.

Vi svelo un segreto....
 sono riuscito a trovare la maniera di per me! ;-)
 Tradurre le istruzione che genera la macro non sempre funziona.
 Questo non ho capito perche'!
 Cmq la soluzione e' questa.... per chi interessa! :-)
 
 $Document->Bookmarks("NomeBookmark")->Select;
 Ciao e grazie comunque!

 $Document->Bookmarks("NomeBookmark")->Select;
Buono a sapersi, però a me quello che ti avevo suggerito funziona:
        use strict;
        use Win32::OLE;
        use Win32::OLE::Const;
        my $Word = GetActiveObject Win32::OLE("Word.Application") or
                die "Can't start Word: $!";
        my $WordConst=Win32::OLE::Const->Load("Microsoft Word");
        my $goto_bookmark = $WordConst->{wdGotoBookmark};
        my $word_doc = $Word->{ActiveDocument};
        my $selezione = $word_doc->{ActiveWindow}->{Selection};
        $selezione->GoTo($goto_bookmark, undef, undef, "tre");
Questo è (in RTF) il documento Word su cui l'ho provato (prima apri il
documento in Word, poi lanci lo script):
    {\rtf1\ansi
    \pard\plain Uno\par 
    \par
    due\par
    \par
    {\*\bkmkstart tre}tre\par{\*\bkmkend tre}
    \par
    quattro\par}
Ciao.

        my $goto_bookmark = $WordConst->{wdGotoBookmark};
         my $goto_bookmark = $WordConst->{wdGoToBookmark};
Mi ha ingannato perché la chiamata con parametri posizionali funziona lo
stesso (del resto ha un senso: gli passo un valore undef come primo
parametro, che è facoltativo, viene interpretato come assenza di parametro,
e quindi viene selezionato il tipo di default, che evidentemente è
bookmark).
Se si usa invece la chiamata con parametri nominali:
       $selezione->GoTo({ What => $goto_bookmark, Name => 'tre' });
il valore undef viene assegnato al parametro specificato (che non può
essere considerato assente, in quanto appunto specificato), ma undef non
corrisponde a nessun tipo di elemento.
Ciao.