Newsgroup: it.comp.lang.perl
Titolo: PERL con WORD

 Ciao a tutti,
 dovrei trasformare il seguente pezzo di codice di macro Word,
 in Perl. 
    Selection.Tables(1).Rows.HeightRule = wdRowHeightExactly
    Selection.Tables(1).Rows.Height = CentimetersToPoints(2)
 
 COME DIVENTA ?
 Io ho provato con qualcosa di simile...
 $word->Selection->Tables(1)->Rows->{HeightRule} = "wdRowHeightExactly";  
 
 $word->Selection->Tables(1)->Rows->Height({CentimetersToPoints => 2});
 ma senza risultati.
 Voi avete idee ??
 GRAZIE
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

    Selection.Tables(1).Rows.Height = CentimetersToPoints(2)
Per quanto riguarda le costanti, devi caricarle con Win32::Const:
  my $wd = Win32::OLE::Const->Load("Microsoft Word 8\\.0 Object Library");
oppure:
    use Win32::OLE;
    use Win32::OLE::Const;
    my $word = Win32::OLE->new('Word.Application', 'Quit');
    my $wd = Win32::OLE::Const->Load($word);
quindi ottieni i valori con $wd->{chiave}:
  $word->Selection->Tables(1)->Rows->{HeightRule} = 
                  $wd->{"wdRowHeightExactly"};
  foreach my $key (keys %$wd) {
        printf "$key = %s\n", $wd->{$key};
  }
CentimetersToPoints invece è un metodo dell'oggetto Application, quindi, se
proprio vuoi usarla, devi richiamarla con:
  print $word->CentimetersToPoints(2);
ma forse fai prima a riscriverla in Perl (1 cm = 28,35 punti).
Ciao.

                  $wd->{"wdRowHeightExactly"};
L'oggetto Selection č il punto di interazione fra Word e utente:
normalmente, in una macro, ha piů senso usare un Range, a meno che la macro
non debba a sua volta interagire esplicitamente con l'utente.
Una macro che sposta il punto di selezione, o magari modifica la stringa di
ricerca (questo č l'effetto di una ricerca da macro con Selection.Find),
all'insaputa dell'utente e senza una ragione visibile, normalmente risulta
fastidiosa.
Naturalmente, se la macro deve agire solo su una porzione arbitraria del
testo decisa dall'utente, č giusto usare Selection.
Non so che cosa debba fare la tua macro, ma mi sono permesso questa
osservazione perché l'uso di Selection č, in generale, a mio parere
abusatissimo.
Ciao.

 Ciao.


 Ciao.


56.6929130554199
Certo, che cosa ti aspettavi che facesse (lo sai che cosa fa un print,
no?). Era solo un esempio sul modo in cui accedere al metodo (e funziona,
da quello che mi dici). Con quel valore ci farai poi quello che vuoi (che
immagino non sia solo stamparle a video).
Per tornare al codice cha hai postato, la versione Perl sarebbe qualcosa
del genere:
     use Win32::OLE;
     use Win32::OLE::Const;
     my $word = Win32::OLE->new('Word.Application', 'Quit');
     my $wd = Win32::OLE::Const->Load($word);
     $word->Selection->Tables(1)->Rows->{HeightRule} = 
                   $wd->{"wdRowHeightExactly"};
     $word->Selection->Tables(1)->Rows->{Height} = 
                   $word->CentimetersToPoints(2);
La corrispondenza del codice con quello che vuoi fare in Word č un problema
tuo, ma ad occhio direi che dovrebbe andare.
Ciao.

basi anche tu ?
La documentazione del modulo Win32::OLE (e sottomoduli Win32::OLE::Const e
altri), e la Guida di Visual Basic per Microsoft Word, entrambe
direttamente sul tuo computer.
Ciao.