Ripulire del testo incollato in Word dopo averlo copiato da altre fonti (e.g. siti, email, file PDF) … alias come creare ed eseguire una Macro in Office

Talvolta si vuole riportare in un file Word del testo preso da altre fonti, quali, ad esempio, siti Web, email, file PDF o altre fonti ancora.
Spesso ci si ritrova con linee andate a capo non desiderate e magari anche con caratteri spuri che si devono poi eliminare in qualche modo per rendere più leggibile il tutto. Assai comune è avere un’interruzione di paragrafo alla fine di ogni riga all’interno di un paragrafo logico e due interruzioni di questo tipo tra paragrafi logici. Il testo ottenuto dal copia & incolla non può quindi essere formattato bene è tutta una serie di paragrafi di una riga. La presenza di tutti gli a capo si può vedere bene in Word configurandolo in modo da visualizzare i segni di formattazione(i.e. clic sul simbolo ¶ sulla barra degli strumenti sulla scheda Home per attivare/disattivare questa opzione).

Fare tutta questa pulizia a manina è certo possibile … ma non è proprio un lavoro edificante, tanto più se si tratta di un testo lungo!
Per fortuna esiste la possibilità in Word sia di utilizzare la funzionalità Sostituisci che appunto modifica del testo in un altro, con anche la possibilità di effettuare tale sostituzione per tutto il documento (Sostituisci tutto) – o per quella parte eventualmente selezionata – , dopo magari avere provato prima con una singola sostituzione!

Nel caso si desideri semplicemente sostituire dei CR (Carriage Return /ritorno a capo), LF (Line Feed/avanzamento linea) o tab, può essere sufficiente effettuare una sostituzione ricercando rispettivamente ^p ^l oppure ^t.

Si noti che il simbolo ^ (carat) si trova come <shift> 6 nella tastiera inglese e <shift> ì in quella italiana.

Sostituzione di tutti gli a capo con uno spazio per tutto il testo o per quello selezionato qualora se ne sia selezionato parte

Tuttavia se la “pulizia” del testo indicata precedentemente non risulta sufficiente, come purtroppo spesso accade, si può allora ricorrere a eseguire un’opportuna macro che effettua più sostituzioni se opportune.
Se creare da zero una macro una può non essere banale (anche se spesso basta semplicemente sfruttare la funzionalità di Registra nella sezione Macro, che appunto consente di registrare delle azioni eseguite da interfaccia utente per poi poterle far ripetere automaticamente in altre occasioni), eseguirne una creata da altri risulta assai semplice.

La gestione delle Macro si trova nella sezione Visualizza

In questo caso specifico un’ottima macro l’ho trovata in Cleaning up Text Pasted from Websites, E-mails, PDFs etc. (msofficeforums.com) per cui basta copiarla e andare a inserire quel codice nella creazione di una nuova macro che si può poi richiamare dal proprio Word.

Creazione di una nuova macro

Premendo il tasto Crea nella finestra di gestione Macro (che compare effettuando un doppio click sull’icona Macro del menù), si apre l’editor che consente di scrivere il codice da associare a quella nuova macro. Nel nostro caso sarà sufficiente copiare e incollare quel codice trovato nel forum!

Per chi interessasse, ecco il link relativo alla programmazione di Macro per Office: Office Visual Basic for Applications (VBA) reference | Microsoft Docs

Riportando quanto indicato in Cleaning up Text Pasted from Websites, E-mails, PDFs etc. (msofficeforums.com):

p che dice “La seguente serie di azioni wildcard di Trova/Sostituisci pulisce il testo incollato da e-mail, siti Web e così via, che inseriscono interruzioni di paragrafo alla fine di ogni riga. Si noti inoltre che il processo presuppone che vi siano almeno due interruzioni di paragrafo di questo tipo tra i paragrafi “reali”.

Per eseguire a wildcard di Trova/Sostituisci, aprire il dialogo Trova/Sostituisci, quindi fare clic su ‘Altro >>’ e, tra le ulteriori opzioni che compaiono, fare clic su quella ‘Usa caratteri jolly‘.

Find = [ ^s^t]{1,}^13
Replace = ^p

Find = ([!^13^l])([^13^l])([!^13^l])
Replace = \1 \3

Find = [^s ]{2,}
Replace = ^32

Find = ([a-z])-[ ^s]{1,}([a-z])
Replace = \1\2

Find = [^13^l]{1,}
Replace = ^p

Nota: a seconda delle impostazioni internazionali del sistema, potrebbe essere necessario sostituire tutte le virgole (,) nelle espressioni Find/Replace precedenti con punti e virgola (;).
Per esempio, [ ^s^t]{1,}^13 diventa [ ^s^t]{1;}^13

La macro seguente automatizza la sequenza Find/Replace di cui sopra, oltre a gestire eventuali problemi d’internazionalizzazione.

Sub CleanUpPastedText()
'Turn Off Screen Updating
Application.ScreenUpdating = False
Dim StrFR As String, i As Long
'Paired F/R expressions, each separated by |
StrFR = "[ ^s^t]{1,}^13|^p|([!^13^l])([^13^l])([!^13^l])|\1 \3|[^s ]{2,}| |([a-z])-[^s ]{1,}([a-z])|\1\2|[^13^l]{1,}|^p"
'Address any Internationalisation issues
If Application.International(wdListSeparator) = ";" Then
  StrFR = Replace(StrFR, ",", ";")
End If
With ActiveDocument.Range.Find
  .ClearFormatting
  .Replacement.ClearFormatting
  .Forward = True
  .Wrap = wdFindStop
  .Format = False
  .MatchAllWordForms = False
  .MatchSoundsLike = False
  .MatchWildcards = True
  'Process all F/R expressions
  For i = 0 To UBound(Split(StrFR, "|")) Step 2
    .Text = Split(StrFR, "|")(i)
    .Replacement.Text = Split(StrFR, "|")(i + 1)
    .Execute Replace:=wdReplaceAll
  Next
End With
'Restore Screen Updating
Application.ScreenUpdating = True
End Sub

Su PC, vedere Installing Macros per saperne di più sull’istallazione di macro e loro utilizzo, mentre su Mac vedi Word:mac – Install a Macro

____

NOTA: Qualora nell’eseguire una macro appaia una finestra di popup, del Microsoft Visual Basic, Application Edition, che dice: “Le macro del progetto sono disattivate. Per informazioni si come attivare le macro, vedere la Guida in linea o la documentazione dell’applicazione host“, allora si deve procedere ad abilitare, almeno temporaneamente, l’esecuzione di macro non firmate, quali ad esempio quella che abbiamo appena creato noi:

Abilitare (temporaneamente) l’esecuzione di macro non firmate per quel progetto: File -> Opzioni -> Centro protezione -> Impostazioni centro protezione -> Impostazioni delle macro -> Abilita tutte le macro

_______________________

Link utili

Pubblicità

Informazioni su Enzo Contini

Electronic engineer
Questa voce è stata pubblicata in Review e test, Tecnologia, Windows. Contrassegna il permalink.

Una risposta a Ripulire del testo incollato in Word dopo averlo copiato da altre fonti (e.g. siti, email, file PDF) … alias come creare ed eseguire una Macro in Office

  1. Pingback: Come aggiungere i sottotitoli, anche in più lingue, a un proprio video su YouTube | Enzo Contini Blog

Lascia un Commento/Leave a comment

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo di WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione /  Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione /  Modifica )

Connessione a %s...

Questo sito utilizza Akismet per ridurre lo spam. Scopri come vengono elaborati i dati derivati dai commenti.