giovedì 7 giugno 2012

Come eliminare tutti i link ipertesto in OpenOffice 🔗

In OpenOffice / LibreOffice (Writer) ogni volta che in un documento si digita l'indirizzo di una e-mail o un indirizzo web la scritta viene trasformata automaticamente in un link ipertesto ovvero un collegamento ipertestuale cliccabile (come ad esempio il seguente link: http://itmanagerlife.blogspot.it ). Tutti i link presenti in un documento sono facilmente identificabili perché sono testi in grassetto e sottolineato di colore blu/viola.
Questa funzione può essere "carina" e molto utile in quanto, posizionandosi sul link e premendo la sequenza di tasti CTRL + clic del mouseimmediatamente si aprirà il browser sulla pagina specificata oppure si aprirà il client di posta elettronica predefinito con già pre-caricato l'indirizzo email indicato.
Tuttavia è possibile che in alcuni casi questa funzione di conversione automatica NON sia desiderata.  
Essa si può disabilitare nel modo seguente:

Accedere al menù "Strumenti" --> "Impostazioni di correzione automatica" e disabilitare la voce "Riconosci URL" sia su [M] che su [D]. Da questo momento in avanti tutti i nuovi indirizzi NON verranno più convertiti automaticamente in collegamenti ipertestuali!

...E per i link già inseriti, si può fare qualcosa?
Si può selezionare il singolo link e con il tasto destro del mouse scegliere nel menù contestuale la voce "rimuovi collegamento ipertestuale".

Se però i link sono tantissimi ?
Purtroppo attualmente non esiste in openoffice una funzione che permetta di togliere tutti i collegamenti ipertestuali di un documento (*Nota1) , quindi bisogna ingegnarsi.
Ecco la macro DeleteAllHyperlinks che si può aggiungere ad OpenOffice e richiamare quando serve.

Option Explicit
Sub DeleteAllHyperlinks 'In a Writer document
Dim oDoc,enum1,TTs,thisT,i,col,row,oCell,oCur,txt,TFs,thisTF
oDoc = ThisComponent
REM Process normal text.
enum1 = oDoc.Text.createEnumeration
Enumerate(enum1)
REM Process tables.
TTs = oDoc.getTextTables
For i = 0 to TTs.Count-1
thisT = TTs.getByIndex(i)
For col = 0 to thisT.Columns.Count-1
  For row = 0 to thisT.Rows.Count-1
   oCell = thisT.getCellByPosition(col,row)
   oCur = oCell.createTextCursor
   txt = oCur.getText
   enum1 = txt.createEnumeration
   Enumerate(enum1)
  Next
Next  
Next
REM Process frames.
TFs = oDoc.getTextFrames
For i = 0 to TFs.getCount-1
thisTF = TFs.getByIndex(0)
enum1 = thisTF.createEnumeration
Enumerate(enum1)
Next
End Sub

Sub Enumerate(enum1)

Dim thisPara,enum2,thisPortion
While enum1.hasMoreElements
thisPara = enum1.nextElement
TableCheck:
If thisPara.SupportsService("com.sun.star.text.TextTable") then 
  If enum1.hasMoreElements then
    thisPara = enum1.nextElement
    Goto TableCheck
   Else Exit Sub
  EndIf
EndIf
enum2 = thisPara.createEnumeration
While enum2.hasMoreElements
  thisPortion = enum2.nextElement
  thisPortion.HyperlinkTarget = ""
  thisPortion.HyperLinkURL = ""
Wend
Wend
End Sub

La macro ovviamente cancella solo i link ipertestuali (hyperlink) ovviamente NON i relativi testi contenuti!


Aggiornamento 17/06/2012: Come installare la macro?
Per Installarla su qualsiasi versione di OpenOffice / LibreOffice si possono intraprendere varie strade. Ecco a mio parere la più semplice

1) Aprire OpenOffice  Writer (in questo caso Apache OpenOffice 3.4

2) Selezionare il menù Strumenti -> Macro -> Organizza macro -> Openoffice.org Basic

3) Compare una finestra di dialogo in cui si deve selezionare "Macro Personali" e poi premere il pulsante "Nuovo"

4) Poi viene richiesto di inserire il nome di un nuovo Modulo (va bene qualunque nome anche Module1, Modulo2 ...)

5) Nella nuova finestra selezionare tutto il contenuto ("Sub Main e End Sub") ed eliminarlo.
Sostituire completamente il testo contenuto con il tutto il testo della Macro DeleteAllHyperlinks 
Chiudere la finestra salvando la macro.



Ora la macro DeleteAllHyperlinks è disponibile per tutti i documenti quindi per poterla utilizzare bisogna aprire il file che contiene i link da cancellare.

Dopodiché per eseguire la macro procedere in questo modo:
a) Selezionare il menù Strumenti -> Macro -> Esegui macro...

b) Nella finestra di dialogo cercare, sotto "Macro Personali" e "Standard", il nome del modulo precedentemente inserito (nel mio caso "Modulo2"). Nel riquadro "Nome Macro" scegliere la voce "DeleteAllHyperlinks" e premere il pulsante "Esegui".


Automaticamente tutti i link vengono eliminati!!!

*Nota1 (aggiornamento del 14/02/2014):
Grazie alla segnalazione di un lettore (Michele) ho potuto verificare che LibreOfficenelle ultime versioni (sicuramente dalla 4.1.2 su Windows e dalla 4.0.4.2 su Linux), ha introdotto la funzione che permette di eliminare molteplici hyperlink in un colpo solo. Basta selezionare tutto il documento o tutti i collegamenti che si desidera eliminare, poi cliccare col tasto destro del mouse e scegliere, nel menù contestuale, la voce "Elimina collegamento".
Invece su OpenOffice versione 4.0.1 (l'ultimo disponibile al momento) NON è ancora presente questa funzione di "eliminazione multipla" dei link ipertestuali e bisogna purtroppo continuare ad usare la Macro sopraindicata.
©RIPRODUZIONE RISERVATA