Condividi tramite

VB: Lettura RTF riga per riga senza codici di formattazione (solo il testo)

Anonimo
2016-01-15T07:14:47+00:00

Salve a tutti, sto cercando di importare in Excel un file RTF (che non contiene immagini ma solo testo formattato) riga per riga ma non riesco a trovare da nessuna parte informazioni su come leggere riga per riga (senza i codici delle formattazioni del testo) un file RTF usando VB.

Ogni riga di testo poi dovrò controllarla per verificare se trovo una determinata sequenza di caratteri e quindi importare nel mio file Excel solo una parte di quella riga.

Per ora mi fermo al mio problema principale, ovvero, come faccio ad importare, almeno in una variabile, una riga di testo di un file RTF ?

Grazie per l'eventuale aiuto.

Microsoft 365 e Office | Excel | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento
Risposta accettata dall'autore della domanda
  1. Anonimo
    2016-01-15T16:13:33+00:00

    Cosa fa il codice qui sotto:

    • Apre un file rtf che si trova in C:\Prova con wordpad
    • Lo salva come txt in Documenti con lo stessso nome
    • Apre e legge il file txt riga per riga
    • Chiude ed elimina il file txt

    Vedi un po' se ti può andare (va lanciata mTrasformaRTF):

    Public Sub mTrasfornmaRTF()

        Call Shell("C:\Program Files\Windows NT\Accessories\wordpad.exe C:\Prova\mioFile.rtf", 1)

        With Application

            .DisplayAlerts = False

            .SendKeys "%F"

            .SendKeys "%V"

            .SendKeys "{RIGHT}"

            .SendKeys "%T"

            .SendKeys "%S"

            .SendKeys "%S"

            .SendKeys "%F"

            .SendKeys "%E"

        End With

        Call mLeggiTXT

    End Sub

    Public Sub mLeggiTXT()

        Const ForReading As Long = 1

        Dim objFSO1 As Object

        Dim objFSO2 As Object

        Dim objTextFile As Object

        Dim s As String

        Application.Wait (Now + TimeValue("00:00:02"))

        s = Environ("USERPROFILE") & "\Documents*mioFile.txt*"

        Set objFSO1 = CreateObject( _

            "Scripting.FileSystemObject")

        Set objTextFile = objFSO1.OpenTextFile _

            (s, ForReading)

        Do Until objTextFile.AtEndOfStream

            MsgBox objTextFile.Readline

        Loop

        Set objTextFile = Nothing

        Set objFSO1 = Nothing

        Set objFSO2 = CreateObject("Scripting.FileSystemObject")

        objFSO2.DeleteFile (s)

        Set objFSO2 = Nothing

    End Sub

    Non tutte le versioni di Wordpad potrebbero avere la stessa sequenza per il salvataggio.

    0 commenti Nessun commento

8 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2016-01-15T09:19:46+00:00

    Purtroppo sono files che ricevo così e ai quali non posso mettere mano.

    Su questo PC ho Word e non c'è problema ma gli che dovranno usare l'applicazione non hanno tutti WORD o possono installarlo.

    Stavo pensando che anche WordPad apre gli RTF e se non erro è presente su tutti i PC con installato Windows (dovrebbe essere svincolato da Office), dici che sarebbe possibile modificare il codice che mi hai dato per usare WordPad al posto di Word?

    0 commenti Nessun commento
  2. Anonimo
    2016-01-15T08:49:38+00:00

    Un file .rtf porta con se le formattazioni. Non riesci a trasformarlo in .txt? Basta salvarlo in quel formato.

    Ancora, un copia/incolla manuale ti mette il testo già diviso per righe in un foglio di Excel. Da lì, gestirlo diventa facile.

    Il file .rtf va comunque aperto.

    0 commenti Nessun commento
  3. Anonimo
    2016-01-15T08:42:46+00:00

    Mauro, grazie per la tua risposta.

    In effetti per "riga" intendevo proprio ciò che hai interpretato tu, ovvero un paragrafo.

    Il tuo codice l'ho provato e funziona benissimo, grazie.

    Ho visto che si appoggia ad una istanza di MS Word.

    Sarebbe possibile fare la stessa cosa anche senza usare WORD?

    0 commenti Nessun commento
  4. Anonimo
    2016-01-15T08:22:32+00:00

    Riga è un concetto variabile se non specifichi bene.

    E' una riga interrotta da un *a capo* (un invio, quindi un paragrafo) o una riga variabile a seconda della larghezza del documento/dimensione carattere/altro?

    Questo codice legge paragrafo per paragrafo un file .rtf. Modifica le parti in grassetto con le tue:

    Public Sub m()

    On Error GoTo RigaErrore

        Dim objWord As Object

        Dim objDoc As Object

        Dim strPath As String

        Dim objPar As Object

        strPath = "C:\Prova\mioFile.rtf"

        If Dir(strPath) <> "" Then

            Set objWord = CreateObject("Word.Application")

            Set objDoc = objWord.Documents.Open(strPath)

        Else

            MsgBox "File non trovato"

            Exit Sub

        End If

        'objWord.Visible = True

        For Each objPar In objDoc.Paragraphs

            MsgBox objPar.Range.Text

        Next

        'objDoc.Saved = True

    RigaChiusura:

        objWord.Quit

        Set objDoc = Nothing

        Set objWord = Nothing

        Exit Sub

    RigaErrore:

        MsgBox Err.Number & vbNewLine & Err.Description

        Resume RigaChiusura

    End Sub

    Se le righe da leggere fossero all'interno di una tabella di Word, il tutto si semplificherebbe.

    0 commenti Nessun commento