Condividi:        

Excel per creare tracciati o importare

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

Excel per creare tracciati o importare

Postdi socrat3 » 12/06/10 15:03

Per l'interscambio di dati tra diverse applicazioni si può usare la confivisione di file testo con un tracciato conosciuto.

Vi chiedo come si può creare in excel una macro per importare ed esportare in formato txt da e per excel. Praticamente ho un "foglio delle specifiche" di tracciato che ha 4 colonne dove scrivo Nome Campo,Formato, Lunghezza, Separatore. e mi produce un file txt o importa file txt. L'importazione avvienne nelle righe di un foglio

In questa maniera excel è nelle condizioni di importare nel secondo foglio che desidero (nelle diverse righe) i dati od esportarli in tanti file secondo quanto definito nel foglio delle specifiche.

Per esempio prendo le specifiche delle camere di commercio disponibili http://www.rcsonline.it/se-infocamere-01.html#record1 che copio nelle prime 4 colonne. seguendo quelle produco un file txt od importo un file txt.

Grazie
socrat3
Utente Junior
 
Post: 16
Iscritto il: 06/06/10 10:05

Sponsor
 

Re: Excel per creare tracciati o importare

Postdi Anthony47 » 12/06/10 17:46

Se vuoi uno strumento di sviluppo, che ti crea quello che desideri in modo parametrizzato, allora penso che hai bisogno di un programmatore...
Se ti accontenti di un prototipo funzionante, allora:
-note le specifiche...
-applichi sulle colonne excel dei tuoi dati la appropriata "formattazione" e una "convalida" (Menu /Dati /Convalida) dove campo per campo imposti i valori ammessi. Cosi' (con l' esempio del tracciato http://www.rcsonline.it/se-infocamere-01.html) col A sara' un "numero intero, tra, 1, 99999"; col B sara' ragionevolmente un "elenco" che punta alla lista delle 1xy provincie italiane; col C sara' formattata "testo" e convalidata come "lunghezzo testo, tra, 5, 21"; e cosi' via. Le sequenze tra virgolette sono da usare nelle singole impostazioni di convalida.
Poi su un secondo foglio:
-riporti i valori di Foglio1, con formule tipo =Foglio1!A1 che copi in lungo e in largo.
-per ogni colonna fai le correzioni richieste dal formato. Cosi':
-col A sara' formattata "personalizzato, 00000"
-in col C (se hai fatto la convalida "da elenco" il dato e' gia' ok
-in col C inserisci gli spazi mancati a 21 (=RIPETI(" ";21-LUNGHEZZA(Foglio1!C1))&Foglio1!C1)
-e cosi' via

Poi inserisci questa macro:
Codice: Seleziona tutto
Sub MacroCsv()
'
ActiveWorkbook.Save
ActiveWorkbook.SaveAs Filename:="pippo132.csv", FileFormat:=xlCSV, CreateBackup:=True
End Sub

Da excel, Alt-F11 per aprire l' editor delle macro; Menu /Inserisci /Modulo; copia il codice e incollalo nel frame di dx.
La macro effettua prima il salvataggio del file di partenza e poi il salvataggio in formato csv, che produrra' un file con tanti campi quante sono le colonne presenti sul foglio attivo al momento dell' esecuzione, esattamente contenenti quanto presente nelle celle, separati dalla "virgola".

Spero che questi spunti siano di tuo interesse.
Ciao.
Avatar utente
Anthony47
Moderatore
 
Post: 19228
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Excel per creare tracciati o importare

Postdi socrat3 » 13/06/10 16:39

Ci ho pensato tutta la notte e ho litigato con mia moglie ma ci dovevo riuscire.
Ecco il link su rapidshare http://rapidshare.com/files/398594604/Prova.zip.html

Contiene il file importa_file_txt_con_tracciato.xls ( in formato 2007 o 2003). Ci sono anche dei file txt di esempio LISTAn.txt

Il tracciato è descritto in un foglio che ho chiamato TRACCIATO ed è relativo ai seguenti campi: COD_FISCALE(16),COGNOME(10),NOME(9),DATA(10). Ho inserito anche la dimensione del caratterer separatore se presente. e gestisce il file che hanno gli accapo o no.

Ora il mio passo successivo è creare una macro che definisca il tracciato in automatico avendo specificato quali campi e relativa dimensione, secondo le specifiche del foglio tracciato. Il passo di estrazione è definito in colonna A.

Spero in aiuti ed ottimizzazioni. Penso di realizzare un userfor appena il motore funzionerà a dovere.

Codice: Seleziona tutto
Public Sub ImportaTxtFile(FName As String, Sep As String)

Dim RowNdx As Long
Dim ColNdx As Integer
Dim TempVal As Variant
Dim WholeLine As String
Dim Pos As Integer
Dim NextPos As Integer
Dim SaveColNdx As Integer
Dim n As Integer

Application.ScreenUpdating = False
'On Error GoTo EndMacro:

SaveColNdx = ActiveCell.Column
RowNdx = ActiveCell.Row

Open FName For Input Access Read As #1

While Not EOF(1)
    Line Input #1, WholeLine
    If Sheets("Tracciato").Cells(2, 6).Value > 0 Then
        If Right(WholeLine, 1) <> Sep Then
        WholeLine = WholeLine & Sep
        End If
    End If
    ColNdx = SaveColNdx
    Pos = 1
    n = 1
'    NextPos = InStr(Pos, WholeLine, Sep)
    NextPos = Sheets("Tracciato").Cells(1, 1).Value
   
    While NextPos >= 1
        If n = 1 Then
        TempVal = Mid(WholeLine, 1, NextPos)
        Cells(RowNdx, ColNdx).Value = TempVal
        n = n + 1
        Pos = NextPos
        ColNdx = ColNdx + 1
        'NextPos = InStr(Pos, WholeLine, Sep)
        NextPos = Sheets("Tracciato").Cells(n, 1).Value
        Else
        TempVal = Mid(WholeLine, Pos + Len(Sep) + 1, NextPos - Pos - Len(Sep))
        Cells(RowNdx, ColNdx).Value = TempVal
        n = n + 1
        Pos = NextPos
        ColNdx = ColNdx + 1
        'NextPos = InStr(Pos, WholeLine, Sep)
        NextPos = Sheets("Tracciato").Cells(n, 1).Value
        End If
    Wend
    RowNdx = RowNdx + 1
Wend

EndMacro:
On Error GoTo 0
Application.ScreenUpdating = True
Close #1
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Fine Importazione Txt File
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
End Sub
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Scegli file Txt e carattere di separazione
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Sub finestraImportazione()
    Dim FileName As Variant
    Dim Sep As String
    FileName = Application.GetOpenFilename(FileFilter:="Text File (*.txt),*.txt")
    If FileName = False Then
        'lascia perdere
         Exit Sub
    End If
    Sep = Application.InputBox("Inserisci il carattere di separazione, se presente:", Type:=2)
    If Sep = vbNullString Then
    End If
    ' controllo se esiste un carattere di separazione e valorizza il foglio 2 cella f2
    If CInt(Len(Sep)) = 0 Then
    Cells(2, 6).Value = 0
    Else
    Cells(2, 6).Value = Len(Sep)
    End If
    Debug.Print "FileName: " & FileName, "Separatore: " & Sep
    ImportaTxtFile FName:=CStr(FileName), Sep:=CStr(Sep)
End Sub
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Fine finestra scelta file e specificazione separatore
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
socrat3
Utente Junior
 
Post: 16
Iscritto il: 06/06/10 10:05


Torna a Applicazioni Office Windows


Topic correlati a "Excel per creare tracciati o importare":


Chi c’è in linea

Visitano il forum: Nessuno e 77 ospiti