Condividi:        

macro excel : da XLS generare txt posizione lunghezza

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

macro excel : da XLS generare txt posizione lunghezza

Postdi buni75 » 20/09/16 16:05

buongiorno,

con una macro di excel, nella quale incrocio 2 file txt, devo ottenere un output .txt con struttura di posizione e lunghezza, niente TAB.
finché si tratta di incrociare i dati con la macro riesco, ma la parte di output .txt e posizione lunghezza no.

qualcuno può aiutarmi?

grazie, Buni

esempio finale :

https://fil.email/TynfL
buni75
Utente Junior
 
Post: 41
Iscritto il: 24/08/11 20:20

Sponsor
 

Re: macro excel : da XLS generare txt posizione lunghezza

Postdi Anthony47 » 20/09/16 21:28

Senza file di esempio su cui provare si puo' solo parlare "in linea di massima".
Quindi, in linea di massima, mi pare che vuoi ottenere dei campi che hanno una lunghezza prefissata; partendo da una STRINGA1 e sapendo che devi produrre una stringa di lunghezza X, allora devi accodare (se allineamento Left) o premettere (se allineamento Right) una sequenza di "spazi". Esempio
Codice: Seleziona tutto
NewString = STRINGA1 & String(X - len(STRINGA1)
La variabile NewString conterra' il campo normalizzato con allineamento a sinistra.

Quando hai dei numeri, allora devi prima trasformarli in stringhe di formato desiderato e poi premetti gli spazi voluti.
Es, se la variabile Prezzo contiene un valore:
Codice: Seleziona tutto
prezzoTxt = Format(Prezzo, "0.000")
NewString = String(X - len(prezzoTxt) & prezzoTxt


Idem con le date.

Se con questi spunti non risolvi allora dovresti pubblicare file esemplificativi su cui lavorare.

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19220
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: macro excel : da XLS generare txt posizione lunghezza

Postdi buni75 » 21/09/16 12:59

ciao

ecco il link per scaricare l'output finale : https://fil.email/1dGOTe
finché si tratta di accorpare dati con la macro sono OK, mi manca la conoscenza per fare salvataggio in txt con specifiche di posizione, lunghezza, allineamento e nome del file.

Buni
buni75
Utente Junior
 
Post: 41
Iscritto il: 24/08/11 20:20

Re: macro excel : da XLS generare txt posizione lunghezza

Postdi buni75 » 21/09/16 15:55

salve,

ho risolto parzialmente con questo codice :

Dim riga As Range, pattern As String
Dim s1 As String, s2 As String, s3 As String, s4 As String, s5 As String, s6 As String, s7 As String

pattern = "1234567890123456789012345678901234567890"
Open "C:\Users\Francesco Tribuni\Documents\Progetti\Juwelo\esportato.txt" For Output As #1

For Each riga In Range("a1:a10000").Rows
s1 = Format(riga.Cells(, 1), "!@@@@@@@@@@@@@")
s2 = Format(riga.Cells(, 2), "!@@@@@@@@")
s3 = Format(riga.Cells(, 3), "!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@")
s4 = Format(riga.Cells(, 4), "!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@")
s5 = Format(riga.Cells(, 5), "!@@@@@@@@")
s6 = Format(riga.Cells(, 6), "!@@@")
s7 = Format(riga.Cells(, 7), "!@@@@@@@@@@@@@@@@@@@@@")

Print #1, s1 & s2 & s3 & s4 & s5 & s6 & s7
Next
Close

End Sub

ho comunque neccessità che la colonna S7 sia allineata a destra.
come si fa?

grazie, Buni
buni75
Utente Junior
 
Post: 41
Iscritto il: 24/08/11 20:20

Re: macro excel : da XLS generare txt posizione lunghezza

Postdi Anthony47 » 22/09/16 01:01

Allora, ho capito che nel foglio Excel tu hai 7 campi (erano 8 nelle prime specifiche, ma mi pare che hai accorpato <PROVIDER> e <PARCEL_ID> in una unica cella e un unico campo di 13 crt), a partire da riga 1 verso il basso (quindi A1:Gxxx).
Se e' cosi', questa macro potra' aiutarti a creare il file txt col formato che aspetti:
Codice: Seleziona tutto
Option Base 1
Sub Buni75()
Dim myForm, myType, I As Long, J As Long, myBlk As String
'Lunghezza campi:
myForm = Array(13, 8, 40, 33, 8, 3, 21)  '
'TIPO: 0=stringa, left;1=data, left; 2=Numero 3 dec, right
myType = Array(0, 1, 0, 0, 1, 0, 2)
Close #1
'>>> nella prossima riga usare il corretto Percorso /Nome file:
Open "C:\Users\USER\Downloads\byBUNI75_AAAA-MM-GG.Ctr_1234_B60921.txt" For Output As #1
For I = 1 To Cells(Rows.Count, 1).End(xlUp).Row
    myBlk = ""
    For J = 1 To UBound(myForm)
        If myType(J) = 0 Then
            myBlk = myBlk & Left(Cells(I, J), myForm(J)) & String(myForm(J) - Len(Left(Cells(I, J), myForm(J))), " ")
        ElseIf myType(J) = 1 Then
            myBlk = myBlk & Left(Cells(I, J), myForm(J)) & String(myForm(J) - Len(Left(Cells(I, J), myForm(J))), " ")
        ElseIf myType(J) = 2 Then
            myBlk = myBlk & String(myForm(J) - Len(Format(Cells(I, J), "0.000")), " ") & Format(Cells(I, J), "0.000")
        End If
    Next J
Debug.Print myBlk
Print #1, myBlk
Next I
Close #1
End Sub
Mettila in un nuovo Modulo del vba, in modo che l'istruzione Option Base 1 sia in testa a tutto.
La riga marcata >>> va personalizzata col tuo Path/nomefile.

Come capirai, in myForm ho inserito la larghezza che devono avere i singoli campi, e in myType il tipo di contenuto dei campi; io ho capito solo cammin facendo che anche quella che pensavo dovessere essere una data (tipo 2, nel mio standard) in realta' e' una stringa, ma mi sono limitato a inserire nel blocco If myType la stessa istruzione sia per il tipo 0 (stringa) che il tipo 2.

Prova e fai sapere...

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19220
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: macro excel : da XLS generare txt posizione lunghezza

Postdi buni75 » 22/09/16 13:51

eccezionale!!!!

ora ti chiedo un'ultima cortesia : devo dare un naming preciso al file e utilizzerei il codice che segue

Fname = "GLS." & Format(date, "yyyy-mm-dd") & ".Ctr_" & Format(time, "HHmm") & ".txt"

va attivato con DIM? dove le metto le righe necessarie?

grazie ancora, BUNI75
buni75
Utente Junior
 
Post: 41
Iscritto il: 24/08/11 20:20

Re: macro excel : da XLS generare txt posizione lunghezza

Postdi Anthony47 » 24/09/16 00:19

La cosa piu' elementare e' che inserisci in due varianti il Percorso e il NomeFile, e poi li combini; esempio:
Codice: Seleziona tutto
myPath = "C:\Users\USER\Downloads\"    '<<< il TUO percorso, con \ finale
Fname = "GLS." & Format(date, "yyyy-mm-dd") & ".Ctr_" & Format(time, "HHmm") & ".txt"

Poi invece della Open col nome fisso di file farai:
Codice: Seleziona tutto
Open (myPath & Fname) For Output As #1


Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19220
Iscritto il: 21/03/06 16:03
Località: Ivrea


Torna a Applicazioni Office Windows


Topic correlati a "macro excel : da XLS generare txt posizione lunghezza":


Chi c’è in linea

Visitano il forum: Nessuno e 50 ospiti