Ciao Jack, Carlo,
jack ha scritto:
> On Sat, Apr 12, 2008 at 6:02 PM, Carlo Montalto <[EMAIL PROTECTED]>
> wrote:
>
>> Sono alle prime armi con la programmazione in Basic per StarOffice 8..
>> Vorrei imparare ad usare il Basic per la programmazione dei fogli di Calc.
>> Per iniziare ho buttato giù, copiando dal manuale "Guida alla
>> programmazione in Basic in StarOffice8" che ho scaricato dal sito della Open
>> Office assieme alla versione 2.4 di Openoffice 2.4
>>
>> Sub Main
>> Dim Doc As object
>> Dim Sheet As object
>> Dim Cell As object
>> Doc = StarDesktop.CurrentComponent
>> Sheet = Doc.Sheets(0)
>> Cell = Sheet.getCellByPosition(0,0)
>> Cell.String = "Test"
>> End Sub
>>
>> Una volta lanciato alla riga "Sheet = Doc.Sheets(0)" Mi compare la
>> fininestrella che riporta "Errore di RunTime Basic - Proprietà e metodo
>> non trovati"
>> Vi ringrazio se vorrete spiegarmi dove sbaglio e se potete aiutarmi
>> eventualmente consigliandomi dei libri in italiano dove possa apprendere la
>> programmazione del basic per calc.
>> Ho usato VBA per Excel e non ho avuto difficoltà a muovermi tra le celle i
>> fogli etc.
>> Vorrei però nella vecchiaia, ho 68 anni, migrare ad OPENOFFICE
>> Cordiali saluti
>> Carlo Montalto
>
>
> Io ho iniziato ad avvicinarmi all' OOo Basic da poco e quel che ho capito e'
> che per quanto sia simile allo StarBasic della Sun e' cosa diversa per cui
> quello che trovi sul tua manuale - e' il medesimo che uso io - non sempre
> funziona
Alt!! Attenzione a non fornire informazioni errate perché poi resteranno
negli archivi per i secoli a venire. :-)
Il codice nel manuale funziona allo stesso modo in OpenOffice.org e in
StarOffice.
Non c'è nessuna differenza tra OOoBasic e StarBasic visto che il codice
sorgente dell'interprete è lo stesso.
In effetti il mio parere è che si dovrebbe usare sempre e solo il nome
StarBasic, visto che l'invenzione del linguaggio è precedente alla
nascita di OOo.
Il problema riscontrato da Carlo è di tutt'altra natura, ma questo lo
vedremo dopo.
> A questo si aggiunge che ci sono diversi modi piu' o meno giusti ma
> funzionati per ottenere il medesimo risultato...ne impari uno ed usi poi
> sempre quello:
>
> per avere il foglio dal suo indice prova:
>
> Foglio=Documento.getSheets().getByIndex(NumeroIndice)
In certi casi l'interprete StarBasic ti permette di usare delle
scorciatoie, ad esempio:
ThisComponent.Sheets(0) equivale a
ThisComponent.getSheets().getByIndex(0)
Lo stesso ThisComponent è una scorciatoia per:
StarDesktop.getCurrentComponent()
Ma anche StarDesktop è una scorciatoia per
oDesk = CreateUnoService("com.sun.star.frame.Desktop")
In realtà, anche la funzione CreateUnoService() è una scorciatoia per:
oCtx = GetDefaultContext()
oServiceManager = oCtx.getServiceManager()
oServiceManager.createInstance("nome.del.servizio")
Tornando ora al problema riscontrato:
[...]
Doc = StarDesktop.CurrentComponent
Sheet = Doc.Sheets(0)
--> "Errore di RunTime Basic - Proprietà e metodo non trovati"
Sulla seconda riga l'interprete ci fa sapere che l'oggetto Doc non ha
un certo metodo di cui non si dice nulla
Come prima osservazione, visto che abbiamo parlato di scorciatoie di
StarBasic, dobbiamo tenere conto che quella riga viene "tradotta" a
livello API come:
Sheet = Doc.getSheets().getByIndex(0)
Ok ora sappiamo che il metodo che non viene trovato è getSheets()
Questo avviene perchè Doc non è un documento Calc come pensavamo.
Ma allora che cos'è Doc ?
Torniamo all'istruzione precedente:
Doc = StarDesktop.CurrentComponent
Questa istruzione serve per ottenere l'istanza del componente attivo.
Se il componente attivo non fosse un documento Calc ma un documento
Writer ad esempio, è evidente che l'istruzione successiva:
Sheet = Doc.Sheets(0)
darebbe proprio l'errore riscontrato da Carlo, spiegando perfettamente
il problema.
Sono certo che Carlo sosterrà che l'unico documento aperto in quel
momento era proprio un documento Calc, perciò la spiegazione deve essere
un'altra.
Ho detto in precedenza che ThisComponent equivale a
StarDesktop.CurrentComponent
Ovvero si tratta di due modi diversi per ottenere il componente attivo
Tuttavia c'è una differenza:
StarDesktop.CurrentComponent non è selettivo rispetto all'IDE di
StarBasic che viene considerato un componente a tutti gli effetti.
Lanciando il comando StarDesktop.CurrentComponent dalla finestra dell
IDE StarBasic perciò, si ottiene l'istanza dell'IDE stesso.
Al contrario, ThisComponent restituisce sempre un documento e mai l'IDE
Per una serie di ragioni sulle quali non mi dilungo, formalmente è più
corretto usare StarDesktop.CurrentComponent rispetto a ThisComponent
perciò il manuale della Sun usa questa forma, senza però spiegare i
problemi nei quali il lettore può incorrere.
Chiaramente questo ha causato molta frustrazione tra gli utenti
principianti e non ha certo giovato alla diffusione di StarBasic.
Si potrebbe aprire un issue chiedendo che l'autore del manuale venga
appeso per gli alluci e immerso a testa in giù nella pece bollente, ma
questo non risolverebbe il problema e, diciamolo, l'autore del manuale
potrebbe anche sollevare qualche eccezione ;-)
Perciò, limitiamoci ad enunciare la :
----------------------------------------------------
Regola aurea per l'uso degli esempi nel manuale Sun:
----------------------------------------------------
Ogni volta che si dovesse trovare l'istruzione:
StarDesktop.CurrentComponent
oppure anche:
StarDesktop.getCurrentComponent()
sostituire con:
ThisComponent
----------------------------------------------------
ciao
Paolo M
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]