Salvare i dati di una tabella come file di testo, con separatori dei vari campi. - dal 04/09/04 pagina vista: volte

Ho già presentato sui siti articoli su come salvare i dati di una tabella di un foglio di lavoro in un file formato testo (.Txt), ma questa volta ci occuperemo di ottenere un file di testo in cui i dati dei vari campi della tabella, vengano salvati come testo separato da punto e virgola, o solo da virgola, o compreso tra doppi apici e separatore (virgola o punto e virgola). Vediamo subito un piccolo esempio per capire: la tabella (foto a sinistra) potrà essere ampia quanto vorrete, sia in colonne che in righe: al centro il file salvato come appare con separatori punto e virgola come delimitatori di campo, a destra il file salvato usando i doppi apici e la virgola come separatore di campi:

 

Questa la routine, peraltro reperita in Internet, leggermente modificata, che si basa come condizione per operare, SULLA SELEZIONE  dell'area da salvare come txt. Questa soluzione consente quindi di decidere noi di volta in volta quale zona di una tabella (tutta, o solo determinati campi e righe) salvare come file di testo. Ovviamente ognuno potrà decidere se assegnare una zona fissa, inserendo le istruzioni che delimitino l'area, in questo caso nelle istruzioni al posto di Selection bisognerà usare il nome della variabile impostata come zona. Esempio:

  • Set MiaZona = Sheets(1).Range("A1:C3")  - e poi nelle righe relative al conto delle  righe e delle colonne, sostituire Selection con MiaZona, così:

  • For RowCount = 1 To MiaZona.Rows.Count   e   For ColumnCount = 1 To MiaZonaColumns.Count

Anche per quanto riguarda il nome con cui salvare il file di testo, potremo decidere la procedura più idonea per noi, nella routine proposta viene utilizzata una InputBox nella quale inserire il percorso completo del file, quindi: unità hard-disk, nome cartella di destinazione, nome del file completo di estensione ( es.: C:\Documenti\MioFile.txt ). Questa è la routine per salvare il file usando come separatori di campo il punto e virgola, poi vedremo le righe da modificare per ottenere un file con separatore virgola, e le righe da modificare per ottenere i doppi apici con separatore virgola:

Sub ExportTesto()
' si dimensionionano tutte le variabili..
Dim DestFile As String
Dim FileNum As Integer
Dim ColumnCount As Integer
Dim RowCount As Integer
'
si imposta la Inputbox per la richiesta del percorso completo dove salvare
DestFile = InputBox("Inserisci il nome con cui salvare" _
& Chr(10) & "(Completo di path):", "Esporta File di testo")
' si ottiene il numero libero disponibile dell'handle (finestra di livello superiore della finestra di 'Excel)
FileNum = FreeFile()
' si imposta un controllo di errori
On Error Resume Next
' si predispone l'apertura del file di destinatione  come output.
Open DestFile For Output As #FileNum
' in caso di errore si avvisa con messaggio e si chiude la richiesta di apertura file (Open)
If Err <> 0 Then
MsgBox "Impossibile aprire il file " & DestFile
End
End If
' si reimposta l'errore a zero (nullo)
On Error GoTo 0
' si inizia il ciclo dalla prima all'ultima riga della selezione
For RowCount = 1 To Selection.Rows.Count
' si inizia il ciclo dalla prima all'ultima colonna della selezione
For ColumnCount = 1 To Selection.Columns.Count
' si scrive il testo della cella corrente nel file aperto
Print #FileNum, "" & Selection.Cells(RowCount, ColumnCount).Text & "";
' si controlla se la cella è nell'ultima colonna della selezione.
If ColumnCount = Selection.Columns.Count Then
' se è nell'ultima colonna, si lascia uno spazio vuoto
Print #FileNum,
Else 
'altrimenti
' si scrive il separatore punto e virgola (tra doppi apici)
Print #FileNum, ";";
End If
' si continua l'iterazione alla prossima colonna
Next ColumnCount
' si continua l'iterazione alla prossima riga
Next RowCount

' alla fine dei cicli si chiude il file di destinazione salvandolo
Close #FileNum
End Sub

Le variazioni: per scrivere il file con il separatore virgola e la parola tra doppi apici, sostituire queste due righe:

' si scrive il testo della cella corrente nel file aperto
Print #FileNum, "" & Selection.Cells(RowCount, ColumnCount).Text & "";

con

' si scrive il testo della cella corrente nel file aperto (notare i quattro doppi apici)
'Print #FileNum, """" & Selection.Cells(RowCount, ColumnCount).Text & """";

e l'altra

' si scrive il separatore punto e virgola (tra doppi apici)
Print #FileNum, ";";

con

' si scrive il separatore virgola (tra doppi apici)
Print #FileNum, ",";

per sostituire solo il punto e virgola con la sola virgola, modificare della routine su esposta solo questa riga:

' si scrive il separatore punto e virgola (tra doppi apici)
Print #FileNum, ";";

con

' si scrive il separatore virgola (tra doppi apici)
Print #FileNum, ",";

 

 

prelevato sul sito www.ennius.altervista.org