macro funzionanti sulla 2.4.2 vanno in crash sulla 3.0.1

11 visualizzazioni
Passa al primo messaggio da leggere

Tommy

da leggere,
6 feb 2009, 16:58:5406/02/09
a
queste macro che seguono funzionano perfettamente sul mio X-OOo 2.4.2
mentre crashano sulla niova versione 3.0.1

questa è la prima macro: serve per estrarre in un nuovo file.odt tutte
le parole segnate come errore nel documento originale.

ecco il codice:

Sub WrongWordsList

Dim oDocModel as Variant
Dim oTextCursor as Variant
Dim oLinguSvcMgr as Variant
Dim oSpellChk as Variant
Dim oListDocFrame as Variant
Dim oListDocModel as Variant
Dim sListaPalabras as String
Dim aProp() As New com.sun.star.beans.PropertyValue

oDocModel = StarDesktop.CurrentFrame.Controller.getModel()
If IsNull(oDocModel) Then
MsgBox("There's no active document." + Chr(13))
Exit Sub
End If

If Not HasUnoInterfaces (oDocModel,
"com.sun.star.text.XTextDocument") Then
MsgBox("This document doesn't support the 'XTextDocument'
interface." + Chr(13))
Exit Sub
End If

oTextCursor = oDocModel.Text.createTextCursor()
oTextCursor.gotoStart(False)

oLinguSvcMgr = createUnoService
("com.sun.star.linguistic2.LinguServiceManager")
If Not IsNull(oLinguSvcMgr) Then
oSpellChk = oLinguSvcMgr.getSpellChecker()
End If
If IsNull (oSpellChk) Then
MsgBox("It's not possible to access to the spellcheck." + Chr
(13))
Exit Sub
End If

Do
If oTextCursor.isStartOfWord() Then
oTextCursor.gotoEndOfWord(True)
' Verificar si la palabra está bien escrita
If Not isEmpty (oTextCursor.getPropertyValue
("CharLocale")) Then
If Not oSpellChk.isValid(oTextCursor.getString(),
oTextCursor.getPropertyValue("CharLocale"), aProp()) Then
sListaPalabras = sListaPalabras + oTextCursor.getString
() + Chr(13)
End If
End If
oTextCursor.collapseToEnd()
End If
Loop While oTextCursor.gotoNextWord(False)

If Len(sListaPalabras) = 0 Then
MsgBox("There are no errors in the document.")
Exit Sub
End If

oListDocFrame = StarDesktop.findFrame
("fListarPalabrasIncorrectas",
com.sun.star.frame.FrameSearchFlag.ALL)
If IsNull(oListDocFrame) Then
oListDocModel = StarDesktop.loadComponentFromURL
("private:factory/swriter", "fListarPalabrasIncorrectas",
com.sun.star.frame.FrameSearchFlag.CREATE, aProp())
oListDocFrame = oListDocModel.CurrentController.getFrame()
Else
oListDocModel = oListDocFrame.Controller.getModel()
End If

oTextCursor = oListDocModel.Text.createTextCursor()
oTextCursor.gotoEnd(False)

oListDocModel.Text.insertString (oTextCursor, sListaPalabras,
False)

oListDocFrame.activate()

End Sub

questa macro invece serve per aggiungere in automatico al dizionario
standard.dic tutte le parole segnate come sbagliate in un documento.
il codice è:

Sub BatchAdd2Dic

Dim oDocModel as Variant
Dim oTextCursor as Variant
Dim oLinguSvcMgr as Variant
Dim oSpellChk as Variant
Dim oListDocFrame as Variant
Dim oListDocModel as Variant
Dim sListaPalabras as String
Dim aProp() As New com.sun.star.beans.PropertyValue

oDocModel = StarDesktop.CurrentFrame.Controller.getModel()
If IsNull(oDocModel) Then
MsgBox("There's no active document." + Chr(13))
Exit Sub
End If

If Not HasUnoInterfaces (oDocModel,
"com.sun.star.text.XTextDocument") Then
MsgBox("This document doesn't support the 'XTextDocument'
interface." + Chr(13))
Exit Sub
End If

' service
oWBListe = createUnoService
("com.sun.star.linguistic2.DictionaryList")

' Wörterbuch (WB)
' Name des Standards: standard.dic
oWB = oWBListe.getDictionaryByName("standard.dic")

oTextCursor = oDocModel.Text.createTextCursor()
oTextCursor.gotoStart(False)

oLinguSvcMgr = createUnoService
("com.sun.star.linguistic2.LinguServiceManager")
If Not IsNull(oLinguSvcMgr) Then
oSpellChk = oLinguSvcMgr.getSpellChecker()
End If
If IsNull (oSpellChk) Then
MsgBox("It's not possible to access to the spellcheck." + Chr
(13))
Exit Sub
End If

Do
If oTextCursor.isStartOfWord() Then
oTextCursor.gotoEndOfWord(True)
' Verificar si la palabra está bien escrita
If Not isEmpty (oTextCursor.getPropertyValue
("CharLocale")) Then
If Not oSpellChk.isValid(oTextCursor.getString(),
oTextCursor.getPropertyValue("CharLocale"), aProp()) Then
oWB.add( oTextCursor.getString
() , FALSE, "" )
sListaPalabras = sListaPalabras + oTextCursor.getString
() + Chr(13)
End If
End If
oTextCursor.collapseToEnd()
End If
Loop While oTextCursor.gotoNextWord(False)

If Len(sListaPalabras) = 0 Then
MsgBox("There are no errors in the document.")
Exit Sub
End If

oListDocFrame = StarDesktop.findFrame
("fListarPalabrasIncorrectas",
com.sun.star.frame.FrameSearchFlag.ALL)
If IsNull(oListDocFrame) Then
oListDocModel = StarDesktop.loadComponentFromURL
("private:factory/swriter", "fListarPalabrasIncorrectas",
com.sun.star.frame.FrameSearchFlag.CREATE, aProp())
oListDocFrame = oListDocModel.CurrentController.getFrame()
Else
oListDocModel = oListDocFrame.Controller.getModel()
End If

oTextCursor = oListDocModel.Text.createTextCursor()
oTextCursor.gotoEnd(False)

oListDocModel.Text.insertString (oTextCursor, sListaPalabras,
False)

oListDocFrame.activate()

End Sub

entrambe le macro sono mandate in crash dalla seguente riga:

la riga che manda in crash è la seguente:

If Not oSpellChk.isValid(oTextCursor.getString(),
oTextCursor.getPropertyValue("CharLocale"), aProp()) Then

mi fate la cortesia di provare se queste macro girano sul vostro OOo
3.0.1

devo capire se òa colpa è di X-OOo oppure se il rpobelma è relativo
alla 3.x in quanto come detto sulla 2.4.2 funzionano egregiamente
senza aver modificato una sillaba di codice


VITRIOL

da leggere,
7 feb 2009, 02:21:0807/02/09
a
Tommy ha scritto:

> entrambe le macro sono mandate in crash dalla seguente riga:
>
> la riga che manda in crash è la seguente:
>
> If Not oSpellChk.isValid(oTextCursor.getString(),
> oTextCursor.getPropertyValue("CharLocale"), aProp()) Then

Non funziona neppure a me, ma non è un crash, e un errore
dell'interprete Basic a runtime col seguente messaggo. "Valore della
proprietà errato".
Non so perché, e non so cosa e cambiato. Aspetta l'opinione di qualcuno
che si intende di macro.

--
news:it-alt.comp.software.openoffice : Il newsgroup dedicato a
OpenOffice.org, la suite open source di applicazioni per ufficio.
Scarica "OpenOffice.org 3.0 Soluzioni a raccolta", molto più di semplici
FAQ! http://it.openoffice.org/doc/manuali/

Tommy

da leggere,
7 feb 2009, 03:05:1407/02/09
a
grazie VITRIOL. allora non è colpa della versione portable...
qualcosa si deve essere incasinato nella serie 3.x...

nell'attesa che qualche macro guru sappia fornire indicazioni utili
qui, provo a sondare il terreno su altri forum stranieri

martello

da leggere,
7 feb 2009, 08:33:0007/02/09
a

> la riga che manda in crash č la seguente:

>
> If Not oSpellChk.isValid(oTextCursor.getString(),
> oTextCursor.getPropertyValue("CharLocale"), aProp()) Then
>
>
>
> mi fate la cortesia di provare se queste macro girano sul vostro OOo
> 3.0.1

Errore dell'interprete non crash di OOo.

Da una indagine con xray il secondo parametro dovrebbe essere un intero.
Non so nulla di piů.

Mettendo un intero a caso scompare l'errore.

If Not SpellChk.isValid(oTextCursor.getString(),5, aProp()) Then

Non č certo buona norma inserire un numero intero a caso ...
Ma la mia indagine per ora si ferma qui.

Tommy

da leggere,
7 feb 2009, 13:08:5507/02/09
a
allora martello, ho provato a modificare la riga incriminata, ovvero:

If Not oSpellChk.isValid(oTextCursor.getString(),
oTextCursor.getPropertyValue("CharLocale"), aProp()) Then

nel modo che suggerisci tu (dimmi una cosa, oltre al numero 5 hai
anche sforbiciato qualcosa, vero?)

If Not SpellChk.isValid(oTextCursor.getString(),5, aProp()) Then


se lancio la macro dopo tali modifiche non ricevo più messaggi di
errore ma la macro non fa ciò per cui è stata creata
mi spiego meglio, la macro WrongWordsList serve a creare un nuovo file
di Writer che contiene l'elenco di tutte le parole che OOo riconosce
come errore dentro ad un documento aperto.

Sulla 2.x andava che era una meraviglia, ora sulla 3.x anche con la
linea di codice modificata secondo i tuoi dettami, la macro non genera
nessun elenco in quanto non vede più gli errori...

appare infatti una finestra di dialogo che sostiene l'assenza di
errori nel documento, anche se questi sono in verità presenti e
visualizzati con la classica sottolineatura ondulata rossa.

Lo stesso vale per la macro add2dic auto che di fatto contiene buona
parte dello stesso codice della macro precedente

Dimmi una cosa martello, anche a te capita lo stesso oppure c'è un
errore di battitura della linea di codice che tu avevi modificato e
che quindi ne pregiudica il funzionamento sul mio OOo?

grazie

martello

da leggere,
7 feb 2009, 13:22:1607/02/09
a Tommy

> Dimmi una cosa martello, anche a te capita lo stesso oppure c'è un
> errore di battitura della linea di codice che tu avevi modificato e
> che quindi ne pregiudica il funzionamento sul mio OOo?

Ho fatto pochissime prove e analisi del codice ... e la modifica che ho
fatto al volo era solo per togliere l'errore ... ma essendo casuale
probabilmente ha compromesso la funzionalità.
Da quel che ho capito dovrebbe essere un intero che identifica la lingua.
Ma oggi vado di corsa.

Tommy

da leggere,
7 feb 2009, 15:08:2607/02/09
a
grazie martello.
butto lì un'ipotesi ...

non vorrei che il cambiamento della gestione dei dizionari linguistici
tra 2.x e 3.x (files .dic della 2.x ed estensioni-dizionario della
3.x) abbia per certi verso mutato il modo in cui OOo identifica parole
giuste e parole sbagliate.

conseguentemente ciò potrebbe aver per certi versi reso obsoleta la
modalità di interazione della macro con i dizionari di OOo.

martello

da leggere,
8 feb 2009, 04:38:3108/02/09
a
Tommy ha scritto:
> grazie martello.
> butto lě un'ipotesi ...

>
> non vorrei che il cambiamento della gestione dei dizionari linguistici
> tra 2.x e 3.x (files .dic della 2.x ed estensioni-dizionario della
> 3.x) abbia per certi verso mutato il modo in cui OOo identifica parole
> giuste e parole sbagliate.
>
> conseguentemente ciň potrebbe aver per certi versi reso obsoleta la
> modalitŕ di interazione della macro con i dizionari di OOo.


Non saprei ... perň c'č qualcosa che mi sfugge.
oSpellChk contiene due metodi IsValid (con lo stesso nome ma lista di
parametri diversa) ... boh?

Non sono in grado di fare valutazioni a riguardo.

Tommy

da leggere,
8 feb 2009, 04:48:4708/02/09
a
Grazie martello, sei stato comunque molto gentile a cercare di capirci
qualcosa.

Ho intanto mandato una mail all'autore della macro e segnalato la cosa
su OOo Community Forum dove in passato avevamo discusso di questa
macro: http://user.services.openoffice.org/en/forum/viewtopic.php?f=20&t=1222

al momento non ho ancora ricevuto risposte ma tengo incrociate le
dita.

martello

da leggere,
8 feb 2009, 04:57:0608/02/09
a
Tommy ha scritto:

prova con questa riga di codice:

If Not
oSpellChk.isValid(oTextCursor.getString(),oTextCursor.getPropertyValue("CharLocale").Language,
aProp()) Then

Tommy

da leggere,
8 feb 2009, 06:08:0608/02/09
a
martello mi inchino a te....

grazie alla tua modifca adesso entrambe le macro funzionano...

per curiosità: pensi di aver capito come mai nella 2.x andavano tutte
bene, mentre nella 3.x risultavano mal interpretate?

martello

da leggere,
8 feb 2009, 06:52:0308/02/09
a

> per curiosità: pensi di aver capito come mai nella 2.x andavano tutte
> bene, mentre nella 3.x risultavano mal interpretate?

No ...

Tommy

da leggere,
8 feb 2009, 07:32:0608/02/09
a
resteremo nel dubbio.
grazie mille ancora.

martello

da leggere,
8 feb 2009, 08:27:1708/02/09
a

> oSpellChk contiene due metodi IsValid (con lo stesso nome ma lista di
> parametri diversa) ... boh?

Sembra che in java si possa fare ...

pablo

da leggere,
8 feb 2009, 09:31:0008/02/09
a
Tommy ha scritto:

> queste macro che seguono funzionano perfettamente sul mio X-OOo 2.4.2
> mentre crashano sulla niova versione 3.0.1

Se il codice è tuo sembra strano che tu non abbia nemmeno la più vaga
idea di cosa non funzioni, se invece non è tuo allora non si capisce
perché lo riporti senza nemmeno citare il nome dell'autore.

Se si tratta di codice rilasciato con licenza GPL/LGPL stai infrangendo
i termini della stessa, se invece il codice non è coperto da alcuna
licenza dovrebbe essere l'educazione a suggerirti di non appropriarti
del lavoro altrui.

ciao
pablo

Tommy

da leggere,
8 feb 2009, 15:09:1508/02/09
a
scusa Pablo ma il tono del tuo post mi sembra veramente fuori luogo...

per prima cosa in nessun post ho detto che la macro era mia...
anzi, se leggi bene tutta la discussione (ma probabilmente non l'hai
nemmeno fatto...) ad un certo punto dico che ho mandato una mail
all'autore per segnalargli il fatto.

Quindi non ho assolutamente cercato in nessun modo di appropriarmi del
codice di nessuno.... per favore prima di fare accuse ed insinuazioni
di questo genere (“appropriarsi del lavoro altrui”... ) cerca di aver
analizzato i fatti in maniera completa e non superficiale perchè hai
veramente travisato la situazione, anzi, per dirla in parole povere
l'hai proprio fatta fuori dal vaso.

Stando alla paternità delle macro, se non l'ho scritta nel primo post
era perchè andavo di fretta e sinceramente non ricordavo dove l'avevo
trovata...

adesso a bocce ferme, ti posso dire che le macro sono un parto di più
persone, in quanto si tratta di un riadattamento di una macro fatta in
origine da un certo Santiago Bosio (link:
http://www.mail-archive.com/us...@es.openoffice.org/msg01456.html )
che però dava qualche problema per cui chiesi aiuto su un forum
straniero ( http://user.services.openoffice.org/en/forum/viewtopic.php?f=20&t=1222&sid=1b56aecdf2a9c8255682e2d52d09f1d6
) dove io stesso provai a fare empiricamente alcune modifiche al
codice rendendolo funzionante a dovere ( quindi per cierti versi forse
un minimo di mia paternità ci sta pure... o vorrai accusarmi di aver
rubato il codice a me stesso?)

la seconda macro non è altro che un'ulteriore rielaborazione per la
quale ho ricevuto l'aiuto dell'utente probe1 ( link:
http://www.oooforum.org/forum/viewtopic.phtml?t=67507&sid=9e2e7b95557c289f87980ef75287d245
)

se ti vai a leggere tutti i link che ho segnalato vedrai come è mia
abitudine citare (e soprattutto ringraziare) le fonti e gli autori di
parti di codice (noterai che in un forum estero ringrazio martello per
la modifica che fa funzionare le macro nella 3.x)

Se stavolta non l'ho fatto fatto è come detto per fretta e perchè non
ricordavo esattamente le fonti... ma non c'era nessuna malizia e
nessun comportamento truffaldino come invece hai insinuato tu.

Sai cosa mi da più fastidio? Che una simile caduta di stile venga da
un utente come te con il quale ho sempre avuto rapporti di cordialità
in quanto mi hai più di una volta aiutato ( e stai sicuro che il tuo
aiuto è sempre stato citato e accreditato anche in altri forum) e
perchè so il tuo livello di esperienza nel campo di OOo e delle macro
(ricordo male o sotto il tuo nick si cela il famoso Paolo Mantovani?).

Se una parte del genere me l'avesse fatta il nostro caro amico
mestovaldo (a proposito, è un po' che non si fa vivo da queste parti?)
probabilmente me la sarei presa di meno... ma abbi pazienza, a farmi
mettere nel mezzo quando non ho colpe proprio io non ci sto...

scusate lo sfogo, ma quando ce vò ce vò!!!

Tommy

da leggere,
12 feb 2009, 17:34:5812/02/09
a
come devo interpretare questo silenzio?

Tommy

da leggere,
15 feb 2009, 05:35:4915/02/09
a
Lasciamo cadere nel vuoto le polemiche relative agli ultimi posts...

torniamo alle questioni di codice (informatico e non comportamentale).

questo è il codice completo della macro editata in modo da evitare il
crash su OOo 3.0.1:

Sub WrongWordsList

oTextCursor = oDocModel.Text.createTextCursor()
oTextCursor.gotoStart(False)

(),oTextCursor.getPropertyValue("CharLocale").Language, aProp()) Then

oTextCursor = oListDocModel.Text.createTextCursor()
oTextCursor.gotoEnd(False)

oListDocModel.Text.insertString (oTextCursor, sListaPalabras,
False)

oListDocFrame.activate()

End Sub

ora la cosa strana è la seguente: se il testo è in italiano la macro
fa il suo dovere egregiamente creando un nuovo file con la lista delle
sole parole non riconosciute dal dizionario (quelle sottolineate in
rosso per intenderci)

se invece il testo è in inglese viene generata una lista contenente
tutte, ma proprio tutte, le parole del documento, siano esse errori o
parole corrette...

avete un'idea di come mai con l'italiano funziona e con l'inglese no?
Vi ricordo che nella versione 2.4.2 il comportamento era ottimale in
entrambe le lingue.

Tommy

da leggere,
17 feb 2009, 13:03:1517/02/09
a
Pablo, se ci sei batti un colpo...
sei la persona più indicata per risolvere il mistero

Tommy

da leggere,
7 mar 2009, 03:13:4307/03/09
a
Ho delle novità sul problema di questa macro che funziona solo per
l'italiano e forse queste possono aiutarvi a scoprire dove sta
l'inghippo.

Su OOo forum l'utente bluegecko ipotizza che la macro in realtà non
vada a controllare il linguaggio in cui è scritto il testo ma si basi
invece sul linguaggio dell'interfaccia di OOo.

E secondo me ha ragione: io ho OOo in italiano ed in effetti la macro
lavora bene su testi italiani mentre cicca completamente se il testo p
in inglese, tedesco o qualsiasi altra lingua...

di fatto la macro interpreta i testi nelle altre lingue come italiano
e quindi “vede” come errori tutte le parole tranne quelle che
incidentalmente hanno la stessa grafia in italiano.

Esempio:

- scrivo in inglese la frase “ do you vant to play with me”
- OOo mi riconosce come errore la parola “vant” che dovrebbe essere
invece “want”
- lancio la macro che dovrebbe quindi estrarmi l'unica parola
sottolineata in rosso
- la lista generata dalla macro contiene invece tutte le parole della
frase tranne “do” e “me” che sono in effetti parole presenti anche in
italiano

un'ulteriore riprova è data dal fatto che all'utente bluegecko che ha
OOo in inglese succede l'esatto opposto: macro funzionante in inglese,
macro impazzita nelle altre lingue

lui sostiene che il problema è forse in questo punto di codice, cito
testualmente :

Prop() - whatever it is - seems to be causing the trouble, as the
language code for oTextCursor.getPropertyValue("CharLocale").Language
does, as far as I can tell, switch correctly when it gets to words in
different languages.


Voi che ne pensate?
riuscite a capire leggendo il codice della macro come mai fa questo
errore?
Grazie.

P.S. Sono ancora in attesa di un chiarimento con pablo (ovviamente
senza astio nè livore ma solo per chiudere una questione tra me lui
rimasta a metà... Spero bazzichi ancora nel forum e che si faccia
sentire

martello

da leggere,
7 mar 2009, 06:37:5307/03/09
a

> Voi che ne pensate?
> riuscite a capire leggendo il codice della macro come mai fa questo
> errore?

nessun errore ... funziona così.

martello

da leggere,
7 mar 2009, 06:47:1907/03/09
a
martello ha scritto:

No non è vero ... boh?

martello

da leggere,
7 mar 2009, 07:00:1707/03/09
a
martello ha scritto:

Dovrebbe essere così ...
La modifica che ho fatto non passa in realtà la struttura relativa al
Locale dellla parola (che dovrebbe essere il formato dati corretto ma
stranamente genera un errore) ma una stringa contenete la lingua.
Probabilmente poichè il dato non ha il formato corretto la stringa viene
semplicemente ignorata e quindi la correzione viene fatta sul Locale di
OOo ... cioè l'italiano.
in effetti si comporta così inserendo anche una stringa vuota al posto
della struttura del Locale.

Tommy

da leggere,
8 mar 2009, 18:03:2908/03/09
a
grazie lo stesso martello,
su OOo Forum ( http://www.oooforum.org/forum/viewtopic.phtml?p=315878#315878
) l'utente ms777 mi ha risolto il problema con questa piccola
correzione al codice:

old: oDocModel = StarDesktop.CurrentFrame.Controller.getModel()
new: oDocModel = ThisComponent


il codice integrale della macro modificata e funzionante è:

Sub WrongWordsList
oDocModel = ThisComponent
If IsNull(oDocModel) Then
MsgBox("There's no active document.")
Exit Sub
End If

If Not HasUnoInterfaces (oDocModel,


"com.sun.star.text.XTextDocument") Then
MsgBox("This document doesn't support the 'XTextDocument'

interface.")
Exit Sub
End If

oTextCursor = oDocModel.Text.createTextCursor()
oTextCursor.gotoStart(False)

oLinguSvcMgr = createUnoService
("com.sun.star.linguistic2.LinguServiceManager")
If Not IsNull(oLinguSvcMgr) Then
oSpellChk = oLinguSvcMgr.getSpellChecker()
End If
If IsNull (oSpellChk) Then

MsgBox("It's not possible to access to the spellcheck.")
Exit Sub
End If

Do
If oTextCursor.isStartOfWord() Then
oTextCursor.gotoEndOfWord(True)
oCharLoc = oTextCursor.getPropertyValue("CharLocale")
If Not isEmpty (oCharLoc) Then
If Not
oSpellChk.com_sun_star_linguistic2_XSpellChecker_isValid
(oTextCursor.getString(),oCharLoc, Array()) Then
sListaPalabras = sListaPalabras +
oTextCursor.getString() + Chr(13)


End If
End If
oTextCursor.collapseToEnd()
End If
Loop While oTextCursor.gotoNextWord(False)

If Len(sListaPalabras) = 0 Then
MsgBox("There are no errors in the document.")
Exit Sub
End If

oListDocModel = StarDesktop.loadComponentFromURL("private:factory/
swriter", "_default", 0, Array())
oListDocModel.Text.String = sListaPalabras
oListDocModel.CurrentController.Frame.activate()

End Sub

Rispondi a tutti
Rispondi all'autore
Inoltra
0 nuovi messaggi