Condividi:        

estrai e ...

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

estrai e ...

Postdi lucas_71 » 27/02/15 20:58

Buonasera, avrei bosogno di una aiuto se è possibile..
Per semplificare e velocizzare un problema al lavoro avrei bisogno di creare una macro che mi estrapoli alcuni dei campi del file in allegato e me lo copi in un txt. Alcuni campi sono presenti altri li dovrei aggiungere...Ho fatto delle prove con questa funzione
Codice: Seleziona tutto
=SINISTRA(A3&RIPETI(" ";14);14)&SINISTRA(F3&RIPETI(" ";30);30)&"+0000001,00"&SINISTRA("+00000"&E3&",00"&RIPETI(" ";11);11) ecc..
ma non credo chi sia la strada giusta..I campi hanno una tabulazione ben definita perchè poi questo txt deve essere gestito da un programma gestionale...Leggendo un po' qua e la ho capito che dovrei usare qualcosa del genere.
Codice: Seleziona tutto
         sRecord = Left$(oFoglio.Cells(i, 1).Value & Space$(14), 14)

        'colonna F; lunghezza=50
        sRecord = sRecord & Left$(oFoglio.Cells(i, 6).Value & Space$(30), 30)
     
     
        'colonna F; lunghezza=50
        sRecord = sRecord & Left$(oFoglio.Cells(i, 3).Value & Space$(7), 7)


ma poi non so come andare avanti...

Ps: ho postato anche in altri forum lo stesso quesito

Grazie a chi potra' aiutarmi.

http://www.filedropper.com/provaestrai_1
http://www.filedropper.com/provafa011198
lucas_71
Utente Junior
 
Post: 19
Iscritto il: 12/01/14 17:42

Sponsor
 

Re: estrai e ...

Postdi Flash30005 » 27/02/15 23:42

veramente non si capisce dove prendi il record che si trova nel file txt con questa composizione:
28016825970642DENT. PARODONTAX 75ML CLASSICO+0000001,00+0000012,00+000000012,00+000000001,95+010,00+000,00+000000000,002210359

spiega meglio
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: estrai e ...

Postdi lucas_71 » 27/02/15 23:52

Grazie Flash30005, effettivamente nel txt non c'è..ho postato solo alcune righe di un file che ne ha 6000/7000...la struttura dei dati però è sempre quella...mi sono dimenticato di scrivere al primo post che mi sarebbe utile che venissero estratte solo quelle righe che hanno un numero nelle celle della colonna C...
lucas_71
Utente Junior
 
Post: 19
Iscritto il: 12/01/14 17:42

Re: estrai e ...

Postdi Flash30005 » 28/02/15 00:25

Secondo me ti sei dimenticato di dire anche altre informazioni
1) il 2 che appare all'inizio della stringa-codice 2801570... dove lo prendi?
2) la parte finale della riga che risulta essere, nel primo record, ,00220256 da dove proviene?

per il resto sto valutando

ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: estrai e ...

Postdi lucas_71 » 28/02/15 00:40

ti dico subito...

il 2 prima dell'ean va aggiunto...nel file xls nel campo ean colonna A il primo carattere non è visibile (alt 160 character)e va tolto, poi abbiamo

000000000,00 dovrebbe essere il prezzo di vendita ma va bene che rimane a 000000000,00 poi 22 che è l' iva, 0256 codice articolo colonna B...
lucas_71
Utente Junior
 
Post: 19
Iscritto il: 12/01/14 17:42

Re: estrai e ...

Postdi Flash30005 » 01/03/15 03:03

Inserisci in un modulo questa macro
Codice: Seleziona tutto
Sub CreaTxt()
Perc = ThisWorkbook.Path & "/"
MioFileTxt = "Pippo.txt"
UR = Range("A" & Rows.Count).End(xlUp).Row
Open Perc & MioFileTxt For Output As #1
For RR = 2 To UR
If IsNumeric(Range("C" & RR).Value) And Range("C" & RR).Value <> "" Then
MSA = 2 & Mid(Range("A" & RR).Value, 2, 13)
MSF = Range("F" & RR).Value
MSC = " +0000001,00"
MSE = "+00000" & Range("E" & RR).Value & ",00"
MSE2 = "+0000000" & Range("E" & RR).Value & ",00"
MSO = "+00000000" & Range("O" & RR).Value
MSP = "+" & Replace(Range("P" & RR).Value, ",", "") & ",00+000,00+000000000,0022"
MSB = Range("B" & RR).Value
Print #1, MSA & MSF & MSC & MSE & MSE2 & MSO & MSP & MSB
End If
Next RR
Close
End Sub


Posizionati sul foglio con i dati e avvia la macro CreaTxt (l'unica che dovresti avere)
Vai nella stessa cartella del file di Excel e troverai il file testo di nome Pippo.txt contente il codice ricavato secondo istruzioni.

ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: estrai e ...

Postdi lucas_71 » 01/03/15 15:06

Grazie Flash30005, ma la macro non fa di preciso quello che occorre a me...sicuramente non mi sono spiegato bene..avrei bisogno che la macro controllasse la 'lunghezza dei vari campi" cioè, il tracciato ha dei campi fissi da rispettare..faccio un esempio con l'ean ma è cosi per tutto il resto:
se l'ean è di 13 cifre ok, ma se dovesse essere di 8, la macro deve aggiungere 5 spazi per far si che poi la descrizione inizi dal 15 ed arrivare al 44...e cosi via. altro esempio: la colonna C può contenere una cifra o due o tre...quindi sara sempre +0000001,00 oppure +0000012,00 oppure +0000123,00 sempre la lunghezza di 10 caratteri ...Grazie di nuovo....
lucas_71
Utente Junior
 
Post: 19
Iscritto il: 12/01/14 17:42

Re: estrai e ...

Postdi Flash30005 » 01/03/15 15:16

nel file hai messo due righe come esempio e la macro le compila identivche alle tue
avresti dovuto inserire altre righe "eccezioni" e avrei impiegato 5 minuti in più ma avrei risolto sin da ieri

attendo altri esempi anche perché per te EAN ha un preciso significato per me sono due vocali e una consonante (maiuscole) :D

ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: estrai e ...

Postdi lucas_71 » 02/03/15 23:03

Ciao Flash30005
ho cercato di fare uno schema per chiarire la lunghezza dei campi del tracciato....
Codice: Seleziona tutto
1.   Da 1 a 1 inserire il 2
2.   Da 2 a 14 riferimento colonna B : se nella colonna B ci sono celle con meno di 13 cifre il riempimento è a dx con gli spazi
3.   Da 15 a 45 riferimento colonna F: se nella colonna F ci sono descrizioni con meno di 30 caratteri riempimento a dx con gli spazi
4.   Da 46 a 46 segno + da aggiungere
5.   Da 47 a 56 riferimento colonna C con riempimento di 0 a sx es: 0000002,00 o  0000003,00
6.   Da 57 a 57 segno +
7.   Da 58 a 67 riferimento colonna E con riempimento di 0 a sx es: 0000020,00 o 0000015,00
8.   Da 68 a 68 segno +
9.   Da 69 a 80 riferimento colonna C * E con riempimento di 0 a sx es: 000000040,00 o 000000045,00
10.   Da 81 a 81 segno +
11.   Da 82 a 93 riferimento colonna P con riempimento di 0 a sx  es: 000000000,95 o 000000010,22 ecc..
12.   Da 94 a 94 segno +
13.   Da 95 a 100 riferimento colonna P con riempimento  di 0 a sx es: 045,00 o 060,00  o 100,00 ecc..
14.   Da 101 a 101 segno +
15.   Da 102 a 107 da aggiungere 000,00
16.   Da 108 a 108 segno +
17.   Da 109 a 120 da aggiungere 000000000,00
18.   Da 121 a 122 da aggiungere 22
19.   Da 123 a 135 riferimento colonna B: se nella colonna B ci sono celle con meno di 13 cifre riempimento a sx  con gli spazi.

speriamo di esserci riuscito... :oops:
lucas_71
Utente Junior
 
Post: 19
Iscritto il: 12/01/14 17:42

Re: estrai e ...

Postdi Flash30005 » 03/03/15 01:01

Secondo me hai fatto un po' di confusione comunque ho modificato la macro per eseguire e compilare il codice secondo la tua ultima descrizione
Codice: Seleziona tutto
Sub CreaTxt()
Perc = ThisWorkbook.Path & "/"
MioFileTxt = "Pippo.txt"
UR = Range("A" & Rows.Count).End(xlUp).Row
Open Perc & MioFileTxt For Output As #1
For RR = 2 To UR
If IsNumeric(Range("C" & RR).Value) And Range("C" & RR).Value <> "" Then
M214 = Mid(Range("A" & RR).Value, 2, 13)
If M214 < 13 Then
For MF = Len(M214) To 13
    M214 = M214 & " "
Next MF
End If
MSA = 2 & M214
MSF = Range("F" & RR).Value
If Len(MSF) < 30 Then
For MF = Len(MSF) To 29
MSF = MSF & " "
Next MF
End If
MSC = "+" & Format(Range("C" & RR).Value, "0000000.00")
MSE = "+" & Format(Range("E" & RR).Value, "0000000.00")
MSE2 = "+" & Format(Range("C" & RR).Value * Range("E" & RR).Value, "0000000.00")
MSO = "+" & Format(Range("O" & RR).Value, "000000000.00")
MSP = "+" & Format(Range("P" & RR).Value * 100, "000.00")
MVV = "+ 000,00+000000000,0022"
MSB = Range("B" & RR).Value
SMSB = ""
If Len(MSB) < 13 Then
For MB = Len(MSB) To 12
SMSB = SMSB & " "
Next MB
End If
MSB = SMSB & MSB
Print #1, MSA & MSF & MSC & MSE & MSE2 & MSO & MSP & MVV & MSB
End If
Next RR
Close
End Sub


Non mi torna
1) il prodotto tra colonna C e E perché non credo siano queste le colonne da prendere in considerazione
2) ripeti due volte la colonna P ma ho preso in considerazione la colonna O e poi P

Ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: estrai e ...

Postdi lucas_71 » 03/03/15 08:57

Ciao Flash,
la stanchezza di ieri sera mi ha tradito..le colonne erano O e P..poi non ti ho specificato in riferimento alla colonna F ma anche nelle altre colonne che se la descrizione supera i 30 caratteri il testo va troncato ed infine da 123 a 135 il riempimento con gli spazi è a dx e non a sx come ho scritto. Per il resto è tutto ok..Grazie ancora per la tua disponibilità.
lucas_71
Utente Junior
 
Post: 19
Iscritto il: 12/01/14 17:42

Re: estrai e ...

Postdi Flash30005 » 03/03/15 10:34

Ma oltre alla colonna F quali altre colonne hanno una descrizione (addirittura che potrebbe superare 30 caratteri)?

Inoltre il prodotto tra la colonna C e E (C * E) è corretto?

Se si penso che così vada bene altrimenti posta ancora

Codice: Seleziona tutto
Sub CreaTxt()
Perc = ThisWorkbook.Path & "/"
MioFileTxt = "Pippo.txt"
UR = Range("A" & Rows.Count).End(xlUp).Row
Open Perc & MioFileTxt For Output As #1
For RR = 2 To UR
If IsNumeric(Range("C" & RR).Value) And Range("C" & RR).Value <> "" Then
M214 = Mid(Range("A" & RR).Value, 2, 13)
If M214 < 13 Then
For MF = Len(M214) To 13
    M214 = M214 & " "
Next MF
End If
MSA = 2 & M214
MSF = Left(Range("F" & RR).Value, 30)
If Len(MSF) < 30 Then
For MF = Len(MSF) To 29
MSF = MSF & " "
Next MF
End If
MSC = "+" & Format(Range("C" & RR).Value, "0000000.00")
MSE = "+" & Format(Range("E" & RR).Value, "0000000.00")
MSE2 = "+" & Format(Range("C" & RR).Value * Range("E" & RR).Value, "0000000.00")
MSO = "+" & Format(Range("O" & RR).Value, "000000000.00")
MSP = "+" & Format(Range("P" & RR).Value * 100, "000.00")
MVV = "+ 000,00+000000000,0022"
MSB = Range("B" & RR).Value
SMSB = ""
If Len(MSB) < 13 Then
For MB = Len(MSB) To 12
SMSB = SMSB & " "
Next MB
End If
MSB = MSB & SMSB
Print #1, MSA & MSF & MSC & MSE & MSE2 & MSO & MSP & MVV & MSB
End If
Next RR
Close
End Sub


ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: estrai e ...

Postdi Flash30005 » 04/03/15 00:26

Aggiungo che, per migliorare l'archiviazione dei file testo
(e anche per non sovrascrivere il file ad ogni avvio di macro proveniente da file diversi),
forse è opportuno assegnargli un nome che corrisponda al foglio di origine.
Per fare questo è sufficiente che sostituisci la "variabile" MioFileTxt invece di "Pippo" con questa riga codice
Codice: Seleziona tutto
MioFileTxt = ActiveSheet.Name & ".txt"


Puoi, comunque, usare qualsiasi altro metodo.

Ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: estrai e ...

Postdi lucas_71 » 04/03/15 16:31

Ciao Flash,
la macro dopo qualche modifca irrilevante fa il suo dovere :)
Codice: Seleziona tutto
If M214 > 13 Then
    For MF = Len(M214) To 12
ho dovuto invertire qui il segno < con >, poi qualche 0 e uno spazio, comunque niente di che..

inoltre il prodotto tra la colonna C e E (C * E) è corretto?

si questo è corretto cosi..

Ma oltre alla colonna F quali altre colonne hanno una descrizione (addirittura che potrebbe superare 30 caratteri)?

In realtà qui mi riferivo al fatto che comunque tutti i campi dovrebbero avere un controllo sulla lunghezza..sia in difetto che in eccesso...per esempio se nella colonna P inserisco 1000% avrei come risultato nel tracciato +1000,00 superando di una carattere il capo record...non so se mi sono spiegato.. :roll:

Aggiungo che, per migliorare l'archiviazione dei file testo
(e anche per non sovrascrivere il file ad ogni avvio di macro proveniente da file diversi),
forse è opportuno assegnargli un nome che corrisponda al foglio di origine.
Per fare questo è sufficiente che sostituisci la "variabile" MioFileTxt invece di "Pippo" con questa riga codice


dopo aver letto qualcosa avevo usato questo codice
Codice: Seleziona tutto
Sub CreaTxt()
    Dim scn As String
    Perc = ThisWorkbook.path & "/"
    scn = Application.GetSaveAsFilename(InitialFileName:=nome_file, fileFilter:="Testo Unicode, *.txt")
    If scn = "Falso" Then Exit Sub


ultima cosa a livello didattico, sono riuscito con le formule a "quasi" completare la funzione
Codice: Seleziona tutto
="2"&STRINGA.ESTRAI(A6&RIPETI(" ";13);2;13)&SINISTRA(F6&RIPETI(" ";30);30)&"+"&CONCATENA(RIPETI(0;7-LUNGHEZZA(C6)); C6)&",00"&"+"&CONCATENA(RIPETI(0;7-LUNGHEZZA(E6)); E6)&",00"&"+"&CONCATENA(RIPETI(0;9-LUNGHEZZA(C6*E6)); C6*E6)&",00"&"+"&CONCATENA(RIPETI(0;12-LUNGHEZZA(O6)); O6)&"+"&CONCATENA(RIPETI(0;3-LUNGHEZZA(P6*100)); P6*100)&",00"&"+"&"000,00"&"+"&"000000000,00"&"22"&SINISTRA(B6&RIPETI(" ";13);13)

solo che non riesco a superare il problema della colonna O, nel senso che se il prezzo è 12.22 è ok ma se finisce con gli 00 la formula non va bene. Grazie per tutto.
lucas_71
Utente Junior
 
Post: 19
Iscritto il: 12/01/14 17:42

Re: estrai e ...

Postdi lucas_71 » 04/03/15 18:49

Capito... :)
Codice: Seleziona tutto
=TESTO(CONCATENA(RIPETI(0;12-LUNGHEZZA(O6));O6);"000000000,00")



completa...
Codice: Seleziona tutto
="2"&STRINGA.ESTRAI(A6&RIPETI(" ";13);2;13)&SINISTRA(F6&RIPETI(" ";30);30)&"+"&CONCATENA(RIPETI(0;7-LUNGHEZZA(C6)); C6)&",00"&"+"&CONCATENA(RIPETI(0;7-LUNGHEZZA(E6)); E6)&",00"&"+"&CONCATENA(RIPETI(0;9-LUNGHEZZA(C6*E6)); C6*E6)&",00"&"+"&TESTO(CONCATENA(RIPETI(0;12-LUNGHEZZA(O6));O6);"000000000,00")&"+"&CONCATENA(RIPETI(0;3-LUNGHEZZA(P6*100)); P6*100)&",00"&"+"&"000,00"&"+"&"000000000,00"&"22"&SINISTRA(B6&RIPETI(" ";13);13)
lucas_71
Utente Junior
 
Post: 19
Iscritto il: 12/01/14 17:42

Re: estrai e ...

Postdi Flash30005 » 05/03/15 01:47

Che formulona!!! :eeh:

Penso vada bene per un centinaio di righe ma se le righe superano il migliaio... (?)
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: estrai e ...

Postdi lucas_71 » 05/03/15 14:29

No no, molto meglio la macro!! :)
lucas_71
Utente Junior
 
Post: 19
Iscritto il: 12/01/14 17:42


Torna a Applicazioni Office Windows


Topic correlati a "estrai e ...":

estrai
Autore: lucas_71
Forum: Applicazioni Office Windows
Risposte: 10

Chi c’è in linea

Visitano il forum: Ricky0185 e 42 ospiti