Importazione di File di Testo Delimitato Scheda con Multiline Cellule (Excel o Access)

Il file di testo delimitato scheda che sto cercando di importare simile a questa (4 campi, il Campo 3 è multiline)… e circa 100.000 righe di dati:

Sotto è solo un esempio… ma si prega di fornire una soluzione generale in cui il testo su più righe, potrebbe essere in più campi… come dire fld3, fld6 e fld7 di un totale di 10 campi.

Field 1 <tab> Field 2 <tab> Field 3.1
Field 3.2
Field 3.3<tab>Field 4
Field 1 <tab> Field 2 <tab> Field 3.1
Field 3.2
Field 3.3<tab>Field 4
Field 1 <tab> Field 2 <tab> Field 3.1
Field 3.2
Field 3.3<tab>Field 4

Ma, in realtà, quando era stato esportato al di sopra di file di testo dal database… ha 3 linee di effettivo… che sembrava come questo… 4 Campi. Campo 3 è su più righe.

Field 1 <tab> Field 2 <tab> Field 3.1(CR)Field 3.2(CR)Field 3.3<tab>Field 4
Field 1 <tab> Field 2 <tab> Field 3.1(CR)Field 3.2(CR)Field 3.3<tab>Field 4
Field 1 <tab> Field 2 <tab> Field 3.1(CR)Field 3.2(CR)Field 3.3<tab>Field 4

dove è la Scheda, e (CR) è un ritorno a capo. Durante l’importazione del file di testo delimitato scheda in Excel, voglio tutte e 3 le linee in Campo 3 (Campo 3.1, Campo 3.2 e Campo 3.3) essere in una cella, ma su più righe. Quindi, fondamentalmente, io voglio excel ignorare ritorno con in Campo 3. Come devo fare???

Per le info… I campi di testo NON sono tra virgolette… la Prego di dirmi che cosa è il modo migliore per convertire il testo in chiaro testo delimitato da tabulazioni file di Excel 4 colonne come questo:

Importazione di File di Testo Delimitato Scheda con Multiline Cellule (Excel o Access)

qualcuno conosce una soluzione. sarebbe molto apprezzato.

Ulteriore Commento

Si prega di notare che quello che ho è solo la risultante File di Testo… come mostrato in cima di questo messaggio…. con il testo “Campo 3.2” in Linea 2, “Campo 3.3” e “Campo 4” nella Riga 3 con che li separa.

Anche… non necessariamente Campo 3 sarà sempre più righe… potrebbe essere multiline con 2, 3 o più linee… o anche nulla o singola riga. Campo 3 non avrà mai una con sé.

Ulteriori Commenti con i File di Esempio per qualcuno di Test – Aggiornamento 25Jun2013 09:05 UTC

nota di pls il copia incolla non funziona.. come schede sono perso.. devi aggiungere voi stessi.

File con le Virgolette intorno al campo multilinea:

f1hdr   f2hdr   f3hdr
f11 "f12
part of f12"    f13
f21 "f22part of f22
part f22
part f22
part f22"   f23
f31 "f32aaa"    f33
f41 "f42bbb"    f43

File senza Virgolette il campo multilinea:

f1hdr   f2hdr   f3hdr
f11 f12
part of f12 f13
f21 f22part of f22
part f22
part f22
part f22    f23
f31 f32aaa  f33
f41 f42bbb  f43

Aprire il file con citazioni in Excel… finestra di Dialogo Apri File… tenere Premuto Maiusc e fare Clic su Apri.. vedi il file piacevolmente con multiline.

Importazione di File di Testo Delimitato Scheda con Multiline Cellule (Excel o Access)

Ma aprire il file senza virgolette.. non funziona.. si rompe.

Non ho idea del perché tenendo premuto il tasto maiusc opere. Sapevo di questo: è da qui che Importazione multiplo di file csv in Excel a livello internazionale

Ora.. ha ancora risposto…

1) Come aggiungere le virgolette il file di testo semplice, la moda prima di importare in Excel… Perché Shift Aprire funziona? Cosa devo fare se voglio controllare ogni delimitato da colonne utilizzo di importazione guidata testo?

2) Come aggiungere le virgolette intorno al campo, per impostazione predefinita, SQL Server 2015. Questo è in aggiunta al di sopra di Q1. Abbiamo ancora bisogno di una soluzione in cui non siamo in grado di esportare il file di nuovo. Ma, per i nuovi esportazione.. qualcuno potrebbe utente la risposta da Q2.

3) Eventuali altri metodi che possono essere anche più semplice?

  • Si può risolvere il problema dell’esportazione? Davvero non dovrebbe avere a che fare con questo per essere onesti. Questa esportazione non è valido per la maggior parte dei sistemi. Dove è questo l’esportazione da?
  • l’esportazione è da sql server 2015.. e i risultati vengono scritti in un file da lì. ho visto poche volte in cui ottenere un preventivo intorno a tutta la stringa del campo. anche in questo caso è davvero un dolore. Si può suggerire di me “come fare correttamente l’esportazione in sql server”. Ma anche allora io vorrei una risposta a questa domanda è così che dove sono non può risolvere la fonte… ho bisogno di un modo per ottenere i dati puliti come nella schermata…. (per Excel o Access). Grazie per il vostro tempo… sono stato attraverso il tuo “joseph” pagina solo ora sul tuo sito… buon lavoro.
  • vedo…hmmm…ok, penso di avere un’idea. E grazie per il feedback sul mio sito 🙂 lo apprezzo
  • c’è un modo di dire quando una riga è terminata? per esempio, si dispone di field 3.3<tab>field 4, ci sarà sempre un ultima colonna senza un ritorno a capo?
  • credo che la mia più grande preoccupazione è come faresti a sapere esattamente dove la riga deve terminare nel file raw? anche guardando manualmente? che cosa succede se l’ultima colonna ha ritorni a capo?
  • Se ci sono solo CR in dati, qual è la linea di separazione? CR+LF ?
  • Potrebbe essere pre o post. Ma se non è garantito che ci sono esattamente 3 righe nella colonna multiriga, e se la fine della linea è la stessa della fine di registrare, anche con pre-elaborazione non riesco a vedere come questo può essere fatto
  • 3 <scheda> significa 4 campi… nel 4 ° campo… non ci sarà più righe.. solo la singola riga che termina con CR… a chiudere la fila. se l’unico modo è quello di pre-processo… io sono sicuro che può essere fatto.. 1 ° campo dall’inizio riga del 1 ° <scheda>, 2 ° campo dal precedente <scheda> prossimo <scheda>, 3 ° campo è da prev <scheda> prossimo <scheda> comprensivo di CR con i dati, 4 ° campo dall’ultima <scheda> alla fine della riga. <scheda> delimitato nel suo senso letterale… tutti i campi sono <scheda> delimitato… e un solo maledetto ignorare ciò che è tra le schede e la cattura di tutti i ritorni a capo in quanto i dati con il<schede>
  • se il pre-processo è l’unico modo… qual è il migliore, il modo più semplice per importare i dati in access o excel… senza andare in tondo.. preferibilmente un clic su fare clic su fare clic su soluzione… no codice coinvolti. @TimWilliams Separatore di Riga è CR così.
  • Ok. Credo che l’unico modo è scrivere un programma in VBA per fare la pre-elaborazione e l’importazione. È necessario scrivere il codice, ho paura.
  • L’ultima colonna NON sarà (MAI) sono di ritorno a capo o addirittura potrebbe essere fatto di non avere MAI aggiungendo dire un campo numerico alla fine. Questo è un dato di fatto.
  • Mi benvenuti suggerimenti in 2 distinti modi.. SIA NECESSARIA… 1) migliore e facile modo per scrivere il pre-processo, una volta per tutte risolvere il caso per eventuali casi futuri con i file come questo.. ho una conoscenza di con python e vba 2) come risolvere il sorgente di dati in sql server 2015 con multiline campi in modo che non ottiene in questo pasticcio per eventuali nuovi dati… Pls suggerimenti per entrambe le esigenze.
  • come ho letto da qui: stackoverflow.com/questions/4389796/… solo se i campi sono di avere ” tra virgolette intorno al campo.. poi si divide molto bene… è importante fare clic su “shift e apri” nella finestra di dialogo file come detto c’è.. Comunque.. per il precedente punto 2.. sarà di aiuto se posso esportare da sql server il 2015 con le quotazioni sui campi attorno…. Per l’Articolo 1 nel commento di cui sopra… sarà interessato a vedere come le virgolette possono essere aggiunti facilmente.. o di eventuali altri tagli corti.
  • Ho aggiunto ulteriori commenti alla mia domanda basandomi su quello che ho letto finora… Può essere che qualcuno può trovare una intelligente soluzione rapida e una spiegazione in 2 parti. 1) Come riparare il file esistente 2) Come risolvere la sorgente di dati in SQL Server 2015 per il futuro.
  • Pre-elaborazione sarebbe molto comodo con il python (presumo sia come perl che io sappia), ma sarebbe in conflitto sarà forse difficile per gli utenti (che dovrebbe attivare un programma esterno, credo). Forse è meglio lavoro diretto in di Excel o Access, VBA. Anche se sarebbe meglio lavorare con il programma di esportazione del DB per avere un file dove il delimitatore di record (CR) non è presente nei dati. Un’altra opzione è sufficiente per eseguire un programma per sostituire CR nei dati originali con un altro meno intrusivo carattere (dire ‘|’, per esempio). Si dovrebbe vedere quello che si ha a disposizione.
  • ho fornito la mia soluzione, senza alcun codice coinvolti… Vorrei qualcuno in grado di migliorare ulteriormente per la leader di 0 problema e “shift + open”

InformationsquelleAutor ihightower | 2013-06-24

 

3 Replies
  1. 3

    Ecco cosa mi è venuta. Se si può garantire che l’ultima colonna non avrà mai un ritorno a capo, quindi questo dovrebbe funzionare bene.

    Quello che fa è leggere il file di testo in VBA e la porta nella cartella di lavoro. Devi specificare come molti campi da aspettare (nello scenario di test, 4). Questo è in modo da poter tenere traccia di quando si è pronti per iniziare una nuova riga.

    È un po ‘ di confusione a causa dei ritorni a capo, ma il passaggio attraverso il codice e penso che sarete in grado di capire. Fatemi sapere se avete domande.

    Option Explicit
    
    Const fieldCount = 4
    
    Sub import()
        Application.ScreenUpdating = False
    
        Dim fileNumber As Integer
        Dim data As String
        Dim curCol As Long, curRow As Long
        Dim dataCols As Long
        Dim i As Long
        Dim sh As Excel.Worksheet
        Dim arr() As String
        Dim hasCarriageReturn As Boolean
    
        fileNumber = FreeFile()
        Open "C:\test.txt" For Input As #fileNumber
        curCol = 1
        curRow = 1
        Set sh = ThisWorkbook.Worksheets("Sheet1")
    
        While Not EOF(fileNumber)
            ' if we reached the "correct" last column, then move to next row
            If (curCol > fieldCount) Then
                curCol = 1
                curRow = curRow + 1
                hasCarriageReturn = False
            End If
    
            Line Input #fileNumber, data
            arr = Split(data, vbTab)
            dataCols = UBound(arr)
    
    
    
            If (dataCols = fieldCount - 1) Then
                ' full row has no carriage returns
                hasCarriageReturn = False
    
                For i = 0 To dataCols
                    sh.Cells(curRow, curCol).Value = arr(i)
                    curCol = curCol + 1
                Next
    
            ElseIf (dataCols = 0 And hasCarriageReturn = True) Then
                ' if there is only 1 value in the row, append it to the current column
                sh.Cells(curRow, curCol - 1).Formula = sh.Cells(curRow, curCol - 1).Formula & Chr(10) & arr(0)
    
            ElseIf (dataCols = 0 And hasCarriageReturn = False) Then
                ' carriage return begins in the first field
                sh.Cells(curRow, curCol).Formula = sh.Cells(curRow, curCol).Formula & Chr(10) & arr(0)
                curCol = curCol + 1
                hasCarriageReturn = True
    
            ElseIf (hasCarriageReturn) Then
                ' append first item to field 3, then rest goes in other columns
                sh.Cells(curRow, curCol - 1).Formula = sh.Cells(curRow, curCol - 1).Formula & Chr(10) & arr(0)
                For i = 1 To dataCols
                    sh.Cells(curRow, curCol).Value = arr(i)
                    curCol = curCol + 1
                Next
    
                hasCarriageReturn = False
    
            Else
                ' process row and note that it has carriage returns
                For i = 0 To dataCols
                    sh.Cells(curRow, curCol).Value = arr(i)
                    curCol = curCol + 1
                Next
    
                hasCarriageReturn = True
            End If
    
        Wend
    
        Application.ScreenUpdating = True
    End Sub
    
    • si prega di notare.. non funziona.. il file di testo originale come sembra è stato dimostrato già in cima… e il tuo metodo non funziona su quel file. appena ho importare il file in excel… la riga che dice “Campo 3.2” sarà su una riga separata da se stessa (Riga 2, Colonna A).
    • le mie scuse, ho perso quel dettaglio. Fammi vedere se riesco a capire qualcosa.
    • aggiunta una nuova risposta
    • ho aggiunto una nuova risposta a me stesso (senza codice).. è possibile pls controllare e commentare per migliorare la parte di 0 iniziale. Mi metterà alla prova la tua risposta domani al lavoro. Vi ringrazio tanto.
    • cosa sicura. fammi sapere come va!
    • il codice funziona alla grande e ho accettato la tua risposta. vorrei farlo senza scrivere una riga di codice e la mia soluzione (o qualcosa di simile) potrebbe essere l’unica opzione senza scrivere alcun codice. Grazie.
    • Sono d’accordo che dovrebbe essere risolto alla fonte. E ‘ una situazione difficile in cui ti trovi, però, e a volte devi fare cose come questa, purtroppo. Per fortuna, però, abbiamo trovato una soluzione alternativa 🙂

  2. 2

    per il momento quello che ho fatto è stato.. usato gvim (lo stesso come il ‘vi’) e sostituito tutti

    \t con "\t" (questo per avere i campi racchiusi tra virgolette...poi.. ad esempio :%s/\t/"\t"/g

    \r\n con "\r (questo per avere la vera fine della linea per avere un preventivo alla fine... quindi ad esempio :%s/\r\n/"\r/g

    linea di start ^20 con ^"20 (questo è per l’inizio della linea primo campo di citazioni… la riga inizia con il 2013… quindi la sostituzione con “il 2013…) ad esempio :%s/^2013/"2013/g

    salvato il file.. come file.txt

    Aprire Excel

    Selezionare il File… e tenere premuto maiusc e fare clic su “apri” (per gentile concessione di: Importazione multiplo di file csv in Excel a livello internazionale)

    Tutti i campi sono ben importati (in Formato Generale) e multilines sono trattati correttamente e messi in campi corretti.

    Questo è veramente meraviglioso… Tuttavia con 1 avvertimento.

    Alcuni dei campi di testo, ma con 0 che porta.. ad esempio '000327511' o '032'.. e volevo zero intatto.. senza excel conversione di numero. Io non riesco a mantenere lo 0 iniziale utilizzando “shift + open” metodo.

    Se io uso il normale importazione guidata testo… poi multiline non può essere fatto per lavorare.. catch 22 la situazione. Peccato!!!!!

    Comunque.. questa è una bella soluzione temporanea fino a quando qualcuno può trovare una correzione permanente tutti uno.
    Nessun codice a tutti i coinvolti… pochi digitando sostituire con vi e click … click …

    Auguro che qualcuno possa migliorare questo metodo leggermente.

    • se si può fare una sorta di grep per il numero, si può provare ad aggiungere un ulteriore apostrofo ' a fronte di un numero. Excel può rendersi conto di formato di testo in chiaro, piuttosto che un numero.
    • sì prenderà in considerazione il tuo commento per la prossima volta. grazie.
    • Vorrei chiarire un po ‘ basato su quello che ho trovato. Il file da importare deve avere estensione TXT, CSV non. Il file deve avere CRLF terminazioni di linea. Ci deve essere CRLF inserito tra i campi, non solo CR come è implicito ihightower. Così una linea di testo assomiglia ‘”Campo 1″<SCHEDA>”Campo 2″<SCHEDA>”Line1Field 3.1<CR><LF>Campo 3.2<CR><LF>Campo 3.3″<SCHEDA>”Campo 4″<CR><LF>’
    • Inoltre, dopo l’importazione da Excel mostra ogni riga della stessa dimensione, ma non autosize linea multipla righe – abbastanza facile da risolvere, sembra proprio sbagliato in un primo momento.
  3. 0

    Importazione di Libre Office Calc. Libre Office Calc non interpretare le interruzioni di riga tra le due schede come una riga di comando. Il contenuto dopo l’interruzione di riga apparirà nella riga successiva, all’interno della stessa cella. Salvare il foglio di calcolo come ms excel xls/xlsx formato.
    Ignorare il messaggio di avviso che appare prima di salvare a tuo rischio e/o prova di lettura del foglio di calcolo dopo l’importazione. Durante la prova di lettura di assicurarsi che si sta utilizzando Excel.

    • In realtà, nella versione 5, le interruzioni di riga tra i delimitatori di fare pausa per la riga successiva. Non vedo un’opzione per fermare questo comportamento.

Lascia un commento