Condividi tramite

SALVARE UN FILE EXCEL IN TXT CON UNA CERTA TABULAZIONE PER POTERLO IMPORTARE CON UN GESTIONALE ERP

Anonimo
2010-09-21T08:18:02+00:00

Buongiorno a tutti,

sono a ri-rompere le scatole chiedendo istruzioni sulle modalità di salvare un file excel 2007 in formato txt.

Ho fatto diverse prove ma tra la prima e la seconda colonna mi inserisce un tab e non gli spazi impostati con "larghezza colonna"

In pratica devo importare un listino sul mio gestionale che accetta file txt riconoscendo un articolo per ogni riga:

es. riga 1 NEI PRIMI 20 CARATTERI C'E' IL CODICE ARTICOLO, NEI 50 CARATTERE SUCCESSIVI C'E' LA DESCRIZIONE ARTICOLO, IN PRATICA OGNI TOT CARATTERI C'E' UN RECORD

il fatto è che se un campo non "riempie" tutti i caratteri destinati a quel tipo di record i caratteri rimanenti devono essere degli spazi vuoti e non dei TAB.

es. lo spazio riservato al codice articolo è di 20 caratteri ma nel file excel mi trovo in A1 il cod. ROSM14CE che occupa 8 caratteri, nel file di testo devo ottenere nella riga 1 il codice ROSM14CE seguito da 12 spazi (8 caratteri occupati dalla scritta e 12 vuoti, tot 20)...   ...e così via.

Ringrazio in anticipatamente chiunque vorrà darmi indicazioni in merito.

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
  1. Anonimo
    2010-09-27T16:31:17+00:00

    ...ho soltanto ancora un problemino: 

    Le celle H, T e U contengono valori in  € e non riesco in nessun a limitare a "2" le cifre decimali...    ...il mio gestionale purtroppo non accetta il valore  :-(

    Basta inserire la forzatura di un formato specifico.

    Ad esempio per la colonna H, anzichè il codice:

            'colonna H; lunghezza=18

            sRecord = sRecord & Left$(oFoglio.Cells(i, 8).Value & Space$(18), 18)

    basta usare questa variante:

            'colonna H; lunghezza=18

            sRecord = sRecord & Left$(format$(oFoglio.Cells(i, 8).Value,"0.00") & Space$(18), 18)

    che aggiunge il comando format$ (che funziona in maniera identica al Formato/Numero sul foglio Excel). Il formato "0.00" indicato prevede di rappresentare sempre due decimali, arrotondando dove necessario. Per formati differenti basta usare la giusta stringa di formattazione (ad esempio "#,##0.00" per inserire anche il separatore delle migliaia).

    Ovviamente la soluzione proposta prevede di allineare i valori sempre a sinistra; se per i numeri serve invece un allineamento a destra bisogna cambiare leggermente le formule (utilizzandoRight$ al posto di Left$ e spostando il comandoSpace$ prima del valore proveniente dalla cella)

    Ciao.

    Roberto


    Roberto Restelli

    Microsoft MVP - Office Systems - Outlook

    ************************************************

    Le FAQ del newsgroup di Outlook: http://www.msoutlook.it

    ************************************************

    Se la risposta ti ha aiutato clicca su "Vota come Utile".

    Se ha risolto il problema clicca su "Segna come Risposta".

    4 persone hanno trovato utile questa risposta.
    0 commenti Nessun commento
Risposta accettata dall'autore della domanda
  1. Anonimo
    2010-09-21T14:46:09+00:00

    Questo è un primo esempio di codice:

    Sub EsportaDati()

        Dim oFoglio As Worksheet, oNuovoFoglio As Worksheet

        Dim i As Long, j As Long, sRecord As String

        Dim sNomeFile As String, sPath As String

       

        Set oFoglio = ActiveSheet

       'Rileva percorso attuale sul file system.

        sPath = ActiveWorkbook.Path

        'Crea un nuovo foglio temporaneo su cui esportare

        Set oNuovoFoglio = ActiveWorkbook.Sheets.Add

       

        'indice prima riga

        i = 17

        'indice prima riga foglio temporaneo

        j = 1

        

      'Inizia un loop su tutte le righe del foglio.

        'La procedura si interrompe quando trova la prima riga vuota.

        Do Until oFoglio.Cells(i, 1).Value = ""

            'Recupera le informazioni per la singola riga.

            'colonna A; lunghezza=20

            sRecord = Left$(oFoglio.Cells(i, 1).Value & Space$(20), 20)

            'colonna B; lunghezza=50

            sRecord = sRecord & Left$(oFoglio.Cells(i, 2).Value & Space$(50), 50)

            'colonna C; lunghezza=20

            sRecord = sRecord & Left$(oFoglio.Cells(i, 3).Value & Space$(20), 20)

            'colonna D; lunghezza=5

            sRecord = sRecord & Left$(oFoglio.Cells(i, 4).Value & Space$(5), 5)

            'colonna E; lunghezza=5

            sRecord = sRecord & Left$(oFoglio.Cells(i, 5).Value & Space$(5), 5)

            'colonna F; lunghezza=5

            sRecord = sRecord & Left$(oFoglio.Cells(i, 6).Value & Space$(5), 5)

            'colonna G; lunghezza=5

            sRecord = sRecord & Left$(oFoglio.Cells(i, 7).Value & Space$(5), 5)

            'colonna H; lunghezza=7

            sRecord = sRecord & Left$(oFoglio.Cells(i, 8).Value & Space$(7), 7)

            'colonna R; lunghezza=7

            sRecord = sRecord & Left$(oFoglio.Cells(i, 18).Value & Space$(7), 7)

            'colonna S; lunghezza=7

            sRecord = sRecord & Left$(oFoglio.Cells(i, 19).Value & Space$(7), 7)

           

            'Scrive il record sul nuovo foglio temporaneo

            oNuovoFoglio.Cells(j, 1).Value = sRecord

           

            'individua la prossima riga

            i = i + 1

            j = j + 1

        Loop

        'Richiede un nome da dare al file

        sNomeFile = InputBox("Inserire il nome del file da dare al file:", "Salva file")

        'Controlla che non sia stato premuto il pulsante di cancellazione o il nome sia vuoto.

        If sNomeFile = "" Then

            MsgBox "Salvataggio interrotto!", vbExclamation

        Else

            'Salva il foglio in formato testo

            oNuovoFoglio.SaveAs Filename:=sPath & "" & sNomeFile, FileFormat:=xlTextPrinter

            MsgBox "Estrazione conclusa! E' stato generato il file:" & vbCr & sPath & "" & sNomeFile, vbInformation

        End If

      

    End Sub

     

    La procedura non contiene grandi controlli sui dati e non sono gestiti gli errori. E' sicuramente migliorabile (ad esempio usando le finestre di dialogo di sistema per richiedere il nome del file e la posizione), ma l'obiettivo è più didattico che operativo quindi non è affatto ottimizzato. Proprio per questa sua natura dovrebbe essere comunque semplice da leggere e capire ed eventualmente modificare. Sono stati inseriti per questo motivo i vari commenti (preceduti da un apostrofo).

    Questo è quello che fa la procedura:

    1. la procedura parte dal foglio attivo, per cui bisogna essere posizionati in un qualsiasi punto del foglio con il listino da esportare
    2. viene creato un nuovo foglio nella stessa cartella di lavoro
    3. per ciascuna riga del foglio di origine viene creato un record con la formattazione indicata
    4. viene richiesto un nome da dare al file
    5. viene salvato il nuovo foglio in formato testo, usando il nome indicato e nella stessa posizione del documento di origine

    Attenzione che:

    • non viene gestito il formato del separatore decimale (le ultime colonne contengono numeri), e viene utilizzato il numero reale senza approssimazione (il valore numerico proviene da una funzione, quindi potrebbe avere molti decimali). Se serve esportare in un formato fisso (ad esempio 2 decimali) bisogna inserire il comando di Format.
    • la posizione del nuovo file generato è la stessa del file di origine
    • rispetto alle indicazioni generali il documento di esempio fornito usa le colonne "R ed S" anzichè "S e T".

    Roberto Restelli

    Microsoft MVP - Office Systems - Outlook

    ************************************************

    Le FAQ del newsgroup di Outlook: http://www.msoutlook.it

    ************************************************

    Se la risposta ti ha aiutato clicca su "Vota come Utile".

    Se ha risolto il problema clicca su "Segna come Risposta".

    0 commenti Nessun commento

13 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2010-09-21T14:47:45+00:00

    Un amico mi ha suggerito una soluzione che sembra un accrocchio ma sembra anche funzionare...

    1. impostare la larghezza colonne con il numero di caratteri di quel report
    2. salvare il file in formato *.prn Testo formattato (delimitato da spazio)
    3. rinominare brutalmente il file generato in *.txt

    Ho tutte le colonne ma direi che comunque può andare...

    1 persona ha trovato utile questa risposta.
    0 commenti Nessun commento
  2. Anonimo
    2010-09-21T09:08:24+00:00

    Perfetto!!!

    funziona benissimo!!!

    domanda: c'è un limite per il numero di colonne che posso concatenare?

    0 commenti Nessun commento
  3. Anonimo
    2010-09-21T08:50:09+00:00

    Le modalità di salvataggio di Excel utilizzano un formato delimitato, quindi prevedendo l'esportazione delle diverse colonne separate da un tabulatore (TAB) o da una virgola (formato CSV).

    La cosa più semplice che potresti fare è di creare una serie di formule su un nuovo foglio o documento che provvedano a combinare le diverse colonne presenti nel foglio di partenza, completando con gli spazi necessari ed aggregando le colonne in un'unica colonna finale. Le funzioni di gestione del testo dovrebbero essere sufficienti per soddisfare le tue necessità.

    Un esempio pratico:

    ammettiamo di avere sul Foglio1 due colonne: colonna A da esportare con 20 caratteri di lunghezza,colonna B da esportare con 50 caratteri di lunghezza.

    Sul Foglio2 potresti creare una formula in A1 di questo tipo (da creare in A1 e ripetere per tutte le celle sottostanti):

    =SINISTRA(Foglio1!A1&RIPETI(" ";20);20)&SINISTRA(Foglio1!B1&RIPETI(" ";50);50)

    dove:

    • l'operatore "&" significa "concatena", quindi unisce stringhe di testo
    • la funzione "RIPETI()" serve per creare una stringa di "x" spazi per riempire le parti mancanti
    • la funzione "SINISTRA()" serve per troncare il testo in eccesso

    Le operazioni che vengono eseguite sono le seguenti: viene preso il contenuto della cella A1 sul Foglio1, vengono aggiunti 20 spazi, vengono infine presi i primi 20 caratteri a partire da sinistra del risultato. A questo viene aggiunto il risultato della medesima operazione eseguita sulla colonna B, con una lunghezza di 50 caratteri.

    Quello che otterrai alla fine sul Foglio2 è una sola solonna A che contiene il testo da salvare (in formato testo).

    Se devi fare questa operazione di frequente potresti pensare di creare una macro VBA; devi ovviamente avere un po' di esperienza con lo sviluppo di questo tipo di procedura.

    Ciao

    Roberto


    Roberto Restelli

    Microsoft MVP - Office Systems - Outlook

    ************************************************

    Le FAQ del newsgroup di Outlook: http://www.msoutlook.it

    ************************************************

    Se la risposta ti ha aiutato clicca su "Vota come Utile".

    Se ha risolto il problema clicca su "Segna come Risposta".

    0 commenti Nessun commento