Da listino excel a file pwe

Anonimo
2013-06-04T08:19:38+00:00

Buongiorno a tutti,

chiedo un aiuto o consiglio per risolvere il seguente problema : utilizzo un software per la gestione dei prezzari , contabilità etc. ed ho la necessità di importare listini in formato xls.

In software in questione digerisce  dei file testo in formato pwe  oppure in metel ovviamente con opportuna formattazione . Ho trovato in rete una macro  che partendo da un listino in excel genera un file metel ma il record che riguarda la descrizione dell'oggetto è impostasto per leggere poche righe sicchè l'importazione della descrizione estesa avviene solo in parte. Vi chiedo un aiuto che possa portarmi alla soluzione del problema. In particolare vorrei scrivere o modificare la macro in modo tale da importarmi tutto il record descrizione e o aggiungere altri record .Non sono molto ferrato con vba ma ci potrei provare seguendo le Vs guide molto chiare che ho avuto modo di leggere sul forum per altri problemi. Spero di essere stato chiaro nell'esposizione del problema.

Grazie

Microsoft 365 e Office | Excel | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento
Risposta accettata dall'autore della domanda
Anonimo
2013-06-05T10:42:09+00:00

IL file excel e all'indirizzo

http://www.fileserve.com/file/gnKQ8g7/createMetel.xls

 

...

Ciao Biagio,

sembra che non abbia l'autorizzazione per scaricare il tuo file, vediamo comunque se ho capito lo stesso.

i listini  che dovrei importare sono in pratica gli stessi che trovi nel file di esempio ma con una descrizione più lunga. Infatti cosi come è impostasto quando nella colonna descrizione vado ad aggiungere testo , dopo l'importazione con il primus il testo viene tagliato perchè il campo è formattato per una certa lunghezza credo. Inoltre dopo l'importazione il software (p...us) mi dà errore campo descrizione. Vorrei capire come modificare il codice affinchè possa gestire al meglio il campo descrizione. 

Si nella domanda precedente mi sono espresso malissimo, volevo dire quando aggiungo testo il campo va in overflow e taglia quello che ho aggiunto appunto. Invece vorrei se fosse possibile che il campo descrizione venisse importato per intero. 

Il problema lo hai individuato tu stesso nelle parti che ti ho evidenziato.

Sul sito che ti ho indicato nel messaggio precedente sono specificate le caratteristiche del formato metel, del quale allego qui le prime righe. Come puoi verificare anche tu, il campo descrizione al quale fai riferimento è un campo alfanumerico che deve essere lungo esattamente 43 caratteri, né uno in più, né uno in meno.

Se la descrizione presente nella cella è più breve di 43 caratteri, la macro vi aggiunge spazi sino ad arrivare a quella lunghezza, se, viceversa è più lunga di 43 caratteri la tronca al 43° carattere.

Con la speranza di aver capito le tue esigenze,

Andrea.

TRACCIATO FILE LISTINO METEL (ver 020)

Records di177 bytes seguit i da un fine riga (CR+LF = Carriage Return e Line F eed)

pos descrizione campo colonna inizio campo M=obbligatorioO=opzionale tipo e lunghezza del campo
1 Sigla Marchio 1 M An 03
2 Codice Prodotto Produttore 4 M An 16
3 Codice EAN 20 O N 13
4 Descrizione prodotto 33 M An 43
5 Quantità cartone 76 M N 05

La risposta è stata utile?

0 commenti Nessun commento

9 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2013-06-05T09:39:50+00:00

    IL file excel e all'indirizzo

    http://www.fileserve.com/file/gnKQ8g7/createMetel.xls

    i listini  che dovrei importare sono in pratica gli stessi che trovi nel file di esempio ma con una descrizione più lunga. Infatti cosi come è impostasto quando nella colonna descrizione vado ad aggiungere testo , dopo l'importazione con il primus il testo viene tagliato perchè il campo è formattato per una certa lunghezza credo. Inoltre dopo l'importazione il software (p...us) mi dà errore campo descrizione. Vorrei capire come modificare il codice affinchè possa gestire al meglio il campo descrizione.

    Si nella domanda precedente mi sono espresso malissimo, volevo dire quando aggiungo testo il campo va in overflow e taglia quello che ho aggiunto appunto. Invece vorrei se fosse possibile che il campo descrizione venisse importato per intero.

    Spero di essere stato più chiaro

    Grazie

    Biagio

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2013-06-05T08:34:40+00:00

    Buongiorno a tutti,

    chiedo un aiuto o consiglio per risolvere il seguente problema : utilizzo un software per la gestione dei prezzari , contabilità etc. ed ho la necessità di importare listini in formato xls.

    In software in questione digerisce  dei file testo in formato pwe  oppure in metel ovviamente con opportuna formattazione . Ho trovato in rete una macro  che partendo da un listino in excel genera un file metel ma il record che riguarda la descrizione dell'oggetto è impostasto per leggere poche righe sicchè l'importazione della descrizione estesa avviene solo in parte. Vi chiedo un aiuto che possa portarmi alla soluzione del problema. In particolare vorrei scrivere o modificare la macro in modo tale da importarmi tutto il record descrizione e o aggiungere altri record. Non sono molto ferrato con vba ma ci potrei provare seguendo le Vs guide molto chiare che ho avuto modo di leggere sul forum per altri problemi. Spero di essere stato chiaro nell'esposizione del problema.

    ...

    Ciao Biagio,

    non riesco a capire il significato delle parti evidenziate.

    Il codice, senza entrare troppo nel dettaglio, crea un file di testo secondo le specifiche indicate qui e non è limitato, ma esporta tutte le righe del foglio che contengono testo nella colonna A.

    Che cosa significa descrizione estesa, che è un campo non previsto nel tracciato e ancora qual'è il record descrizione?

    Oltre ai tuoi chiarimenti, forse è il caso che alleghi il file excel da esportare, o una parte di esso.

    Ciao,

    Andrea.

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2013-06-04T20:42:19+00:00

    Ciao Andrea ,

    ti posto il codice che ho estratto dal file , non credo che possa postarti tutto il file completo comunque lo incollo cosi come lo visualizzo dalla macro:

    Private Sub Create_Metel_Click()

    On Error Resume Next

    Const ErrorTitle = "Errore!"

    Const OutputFileName = "ListinoMetel.txt"

    Const Metel_Tracciato_Listino = "LISTINO METEL       "

    Const Metel_Ver_Tracciato_Listino = "020"

    Const Metel_RowLength_Listino = 177

    Const MHeader_IdTracciato = 20

    Const MHeader_Listino_SiglaAzienda = 3

    Const MHeader_Listino_PartitaIVA = 11

    Const MHeader_Listino_NumeroList = 6

    Const MHeader_Listino_Decorrenza = 8

    Const MHeader_Listino_UltimaVariaz = 8

    Const MHeader_Listino_Descrizione = 30

    Const MHeader_Listino_Filler1 = 39

    Const MHeader_Listino_VerTracciato = 3

    Const MHeader_Listino_Filler2 = 49

    Const MData_Listino_SiglaMarchio = 3

    Const MData_Listino_CodProdAzienda = 16

    Const MData_Listino_CodProdottoEAN = 13

    Const MData_Listino_DescrProdotto = 43

    Const MData_Listino_QtaCartone = 5

    Const MData_Listino_QtaMultiplaOrd = 5

    Const MData_Listino_QtaMinOrd = 5

    Const MData_Listino_QtaMaxOrd = 6

    Const MData_Listino_LeadTime = 1

    Const MData_Listino_PrezzoRivendit = 11

    Const MData_Listino_PrezzoPubblico = 11

    Const MData_Listino_MoltiplPrezzo = 6

    Const MData_Listino_CodiceValuta = 3

    Const MData_Listino_UnitaMisura = 3

    Const MData_Listino_ProdComposto = 1

    Const MData_Listino_StatoProdotto = 1

    Const MData_Listino_DataUltVariaz = 8

    Const MData_Listino_FamigliaSconto = 18

    Const MData_Listino_FamigliaStatis = 18

    Const ForReading = 1, ForWriting = 2, ForAppending = 8

    Dim fs, OutputFile

    Set fs = CreateObject("Scripting.FileSystemObject")

    Set OutputFile = fs.OpenTextFile(fs.GetParentFolderName(ActiveWorkbook.FullName) & "" & OutputFileName, ForWriting, True)

    If Not IsStdDate(Decorrenza_Listino.Text) Then

      MsgBox "Errore di dati nel campo ""Decorrenza listino"" (era attesa una data nel formato gg/mm/aaaa)", vbExclamation + vbSystemModal, ErrorTitle

      Exit Sub

    End If

    If Not IsStdDate(Data_Ultima_Variaz.Text) Then

      MsgBox "Errore di dati nel campo ""Data ultima variazione"" (era attesa una data nel formato gg/mm/aaaa)", vbExclamation + vbSystemModal, ErrorTitle

      Exit Sub

    End If

    OutputFile.WriteLine (Metel_Tracciato_Listino & _

                          FillStr(Sigla_Azienda.Text, " ", MHeader_Listino_SiglaAzienda) & _

                          FillStr(Partita_IVA.Text, " ", MHeader_Listino_PartitaIVA) & _

                          FillStr(Numero_Listino.Text, " ", MHeader_Listino_NumeroList) & _

                          FillStr(StdToMetelDateConvert(Decorrenza_Listino.Text), " ", MHeader_Listino_Decorrenza) & _

                          FillStr(StdToMetelDateConvert(Data_Ultima_Variaz.Text), " ", MHeader_Listino_UltimaVariaz) & _

                          FillStr(Descrizione_Listino.Text, " ", MHeader_Listino_Descrizione) & _

                          FillStr("", " ", MHeader_Listino_Filler1) & _

                          Metel_Ver_Tracciato_Listino & _

                          FillStr("", " ", MHeader_Listino_Filler2) _

                         )

    i = 5 ' Prima riga di dati

    Do While Len(ActiveSheet.Cells(i, 1).Text) <> 0

      If Not IsStdDate(ActiveSheet.Cells(i, 17).Text) Then

        MsgBox "Errore di dati alla riga " & i & " colonna ""Data ultima variazione"" (era attesa una data nel formato gg/mm/aaaa)", vbExclamation + vbSystemModal, ErrorTitle

        Exit Do

      End If

      OutputFile.WriteLine (FillStr(ActiveSheet.Cells(i, 1).Text, " ", MData_Listino_SiglaMarchio) & _

                            FillStr(ActiveSheet.Cells(i, 2).Text, " ", MData_Listino_CodProdAzienda) & _

                            Fill0Str(ActiveSheet.Cells(i, 3).Text, MData_Listino_CodProdottoEAN) & _

                            FillStr(ActiveSheet.Cells(i, 4).Text, " ", MData_Listino_DescrProdotto) & _

                            Fill0Str(ActiveSheet.Cells(i, 5).Text, MData_Listino_QtaCartone) & _

                            Fill0Str(ActiveSheet.Cells(i, 6).Text, MData_Listino_QtaMultiplaOrd) & _

                            Fill0Str(ActiveSheet.Cells(i, 7).Text, MData_Listino_QtaMinOrd) & _

                            Fill0Str(ActiveSheet.Cells(i, 8).Text, MData_Listino_QtaMaxOrd) & _

                            FillStr(ActiveSheet.Cells(i, 9).Text, " ", MData_Listino_LeadTime) & _

                            Fill0Str(Trim(Str(Round(ActiveSheet.Cells(i, 10).Value * 100))), MData_Listino_PrezzoRivendit) & _

                            Fill0Str(Trim(Str(Round(ActiveSheet.Cells(i, 11).Value * 100))), MData_Listino_PrezzoPubblico) & _

                            Fill0Str(Trim(Str(ActiveSheet.Cells(i, 12).Value)), MData_Listino_MoltiplPrezzo) & _

                            FillStr(ActiveSheet.Cells(i, 13).Text, " ", MData_Listino_CodiceValuta) & _

                            FillStr(ActiveSheet.Cells(i, 14).Text, " ", MData_Listino_UnitaMisura) & _

                            FillStr(ActiveSheet.Cells(i, 15).Text, " ", MData_Listino_ProdComposto) & _

                            FillStr(ActiveSheet.Cells(i, 16).Text, " ", MData_Listino_StatoProdotto) & _

                            FillStr(StdToMetelDateConvert(ActiveSheet.Cells(i, 17).Text), " ", MData_Listino_DataUltVariaz) & _

                            FillStr(ActiveSheet.Cells(i, 18).Text, " ", MData_Listino_FamigliaSconto) & _

                            FillStr(ActiveSheet.Cells(i, 19).Text, " ", MData_Listino_FamigliaStatis) _

                           )

      i = i + 1

    Loop

    ActiveSheet.Cells(1, 1).Value = i

    OutputFile.Close

    ' Verifica eventuali errori durante l' elaborazione

    If Err.Number <> 0 Then

      MsgBox "Si è verificato un errore durante l' elaborazione del listino o la scrittura dei dati sul file di uscita:" & vbCrLf & _

             "la conversione potrebbe non essere completa!", vbExclamation + vbSystemModal, ErrorTitle

      WScript.Quit

    End If

    End Sub

    ' ***********************************************************************

    '  Funzione per convertire il formato "data" come scritto nel file Metel

    '  (yyyymmdd) nel formato "dd/mm/yyyy"

    ' ***********************************************************************

    Function MetelDateConvert(MetelDateStr)

    If Len(MetelDateStr) <> 8 Then

      MetelDateConvert = ""

    Else

      MetelDateConvert = Right(MetelDateStr, 2) & "/" & Mid(MetelDateStr, 5, 2) & "/" & Left(MetelDateStr, 4)

    End If

    End Function

    ' ***********************************************************************

    '  Funzione per portare una stringa alla lunghezza voluta, aggiungendo un

    '  carattere di riempimento se troppo corta o troncandola se troppo lunga

    ' ***********************************************************************

    Function FillStr(InString, StrFiller, OutStrLen)

    Do While Len(InString) < OutStrLen

      InString = InString & StrFiller

    Loop

    FillStr = Left(InString, OutStrLen)

    End Function

    ' ***********************************************************************

    '  Funzione per portare una stringa alla lunghezza voluta aggiungendo

    '  degli zeri a sinistra

    ' ***********************************************************************

    Function Fill0Str(InString, OutStrLen)

    Do While Len(InString) < OutStrLen

      InString = "0" & InString

    Loop

    Fill0Str = Left(InString, OutStrLen)

    End Function

    ' ***********************************************************************

    '  Funzione per verificare se una stringa è composta solo da caratteri

    '  numerici

    ' ***********************************************************************

    Function IsNumber(InString)

    IsNumber = True

    For i = 1 To Len(InString)

      i_chr = Mid(InString, i, 1)

      If (i_chr < "0") Or (i_chr > "9") Then

        IsNumber = False

      End If

    Next i

    End Function

    ' ***********************************************************************

    '  Funzione per verificare se una stringa contiene una data nel formato

    '  standard gg/mm/aaaa

    ' ***********************************************************************

    Function IsStdDate(InString)

    IsStdDate = (Len(InString) = 10) And _

                (IsNumber(Mid(InString, 1, 2))) And _

                (Mid(InString, 3, 1) = "/") And _

                (IsNumber(Mid(InString, 4, 2))) And _

                (Mid(InString, 6, 1) = "/") And _

                (IsNumber(Mid(InString, 7, 4)))

    End Function

    ' ***********************************************************************

    '  Funzione per convertire il formato "data" nella forma gg/mm/aaaa

    '  nel formato Metel (aaaammgg)

    ' ***********************************************************************

    Function StdToMetelDateConvert(StdDateStr)

    StdToMetelDateConvert = Mid(StdDateStr, 7, 4) & Mid(StdDateStr, 4, 2) & Mid(StdDateStr, 1, 2)

    End Function

    Grazie mille

    Biagio

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2013-06-04T13:11:34+00:00

    Buongiorno a tutti,

    chiedo un aiuto o consiglio per risolvere il seguente problema : utilizzo un software per la gestione dei prezzari , contabilità etc. ed ho la necessità di importare listini in formato xls.

    In software in questione digerisce  dei file testo in formato pwe  oppure in metel ovviamente con opportuna formattazione . Ho trovato in rete una macro  che partendo da un listino in excel genera un file metel ma il record che riguarda la descrizione dell'oggetto è impostasto per leggere poche righe sicchè l'importazione della descrizione estesa avviene solo in parte. Vi chiedo un aiuto che possa portarmi alla soluzione del problema. In particolare vorrei scrivere o modificare la macro in modo tale da importarmi tutto il record descrizione e o aggiungere altri record .Non sono molto ferrato con vba ma ci potrei provare seguendo le Vs guide molto chiare che ho avuto modo di leggere sul forum per altri problemi. Spero di essere stato chiaro nell'esposizione del problema.

    Grazie

    Ciao Biagio,

    per favore posta il codice vba che ci diamo un'occhiata.

    Andrea.

    La risposta è stata utile?

    0 commenti Nessun commento