Exort TXT colonne allineante



  • Exort TXT colonne allineante
    di adavide (utente non iscritto) data: 11/04/2014 09:45:44

    Salve a tutti, il mio problema è il seguente:
    Vorrei creare una macro che, partendo da un file di excel con 3 colonne all'interno delle quali i dati hanno una lunghezza variabile, esporti un file txt con 3 colonne da 22 14 30 digit all'interno delle quali i dati vengono allineanti a destra quindi anteponendo spazi al numero fino al completamento della colonna.
    00.00.00.00 AA01.1000 1000,00
    00.00.00.00 BB01.2000 0,00
    00.00.00.00 CC01.2005 220000,00

    Grazie



  • di lepat (utente non iscritto) data: 11/04/2014 10:39:41

    allega un file excel di esempio ed il risultato desiderato



  • di adavide data: 11/04/2014 10:51:54

    Ho allegato sia il file di Excel che il tracciato del txt che vorrei ottenere.
    Grazie



  • di lepat (utente non iscritto) data: 11/04/2014 10:58:09

    non mi sembrano congruenti i due file



  • di adavide data: 11/04/2014 11:10:25

    cosa intendi per congruenti scusa?
    io parto dal file excel con i dati organizzati in quel modo li, devo organizzarli nel txt secondo quel tracciato



  • di lepat (utente non iscritto) data: 11/04/2014 12:35:50

    prova questa
     
    Option Base 1
    Sub esportaFormattato()
    pf$ = "C:testp.txt"   ' nome del file da salvare
    nri% = 4 ' imposta n° righe
    nco% = 3 ' imposta n° colonne
    f% = FreeFile
    Open pf$ For Output As #f%
    arr = Array(String(22, "@"), String(14, "@"), String(30, "@"))
    For riga% = 1 To nri%
        For col% = 1 To nco%
            Print #f%, Format(Cells(riga%, col%), arr(col%));
        Next col%
        If riga% < nri Then Print #f%,
    Next riga%
    Close #f%
    End Sub
    



  • di adavide data: 11/04/2014 13:31:21

    Grazie, funziona!!!
    solo una cosa, non si può fare in modo che crei tante righe quante ce ne sono del file di excel, io ho postato un esempio con 3 righe ma sul file originale ci sono almeno 1500 record ma a volte possono essere di più o anche di meno!!!
    Ti ringrazio



  • di lepat (utente non iscritto) data: 11/04/2014 14:22:26

    così
     
    Option Base 1
    Sub esportaFormattato()
    pf$ = "C:testp.txt"   ' nome del file da salvare
    nri%= Cells(Rows.Count, "A").End(xlUp).Row
    nco% = 3 ' imposta n° colonne
    f% = FreeFile
    Open pf$ For Output As #f%
    arr = Array(String(22, "@"), String(14, "@"), String(30, "@"))
    For riga% = 1 To nri%
        For col% = 1 To nco%
            Print #f%, Format(Cells(riga%, col%), arr(col%));
        Next col%
        If riga% < nri Then Print #f%,
    Next riga%
    Close #f%
    End Sub



  • di adavide data: 14/04/2014 09:57:35

    Va alla grande!!!
    Grazie



  • di lepat (utente non iscritto) data: 14/04/2014 10:00:36

    prego metto risolto



  • di adavide data: 14/04/2014 10:29:09

    E se io volessi fare in modo che nella 3 colonna del txt mi aggiungesse 2 decimali alla cifra solo se in excel non sono presenti?
    mi spiego meglio, in excel, nella colonna C posso avere 1234,80 oppure 4567. Nella 3 colonna del txt vorrei che comparisse 1234,80 e 4567,00.
    Se aggiungo i decimali nel formato cella di excel sul txt, chiaramente, non compaiono essendo solo una visualizzazione.
    Ti ringrazio per la pazienza



  • di lepat (utente non iscritto) data: 14/04/2014 15:05:22

    prova così


     
    Sub esportaFormat()
    pf$ = "C:usersandredesktopp.txt"   ' nome del file da salvare
    nri% = 4 ' imposta n° righe
    nco% = 3 ' imposta n° colonne
    f% = FreeFile
    Open pf$ For Output As #f%
    arr = Array(String(22, "@"), String(14, "@"), String(30, "@"))
    For riga% = 1 To nri%
        For col% = 1 To nco%
          s = Cells(riga%, col%).Text
          If col% = 3 Then s = Format(s, "0.00")
            Print #f%, Format(s, arr(col%));
        Next col%
        If riga% < nri Then Print #f%,
    Next riga%
    Close #f%
    End Sub