Excel CSV: formato della cella numerica


86

Produco un rapporto come file CSV. Quando provo ad aprire il file in Excel, fa un'ipotesi sul tipo di dati in base al contenuto della cella e lo riformatta di conseguenza.

Ad esempio, se il file CSV contiene

...,005,...

Quindi Excel lo mostra come 5. C'è un modo per sovrascriverlo e visualizzare 005?

Preferirei fare qualcosa al file stesso, in modo che l'utente possa semplicemente fare doppio clic sul file CSV per aprirlo.

Uso Excel 2003.


Vedere questa domanda per una soluzione macro a questo problema.
Adam Jensen

Al giorno d'oggi ci sono molte librerie di scrittura di Excel là fuori. Dovrebbe essere abbastanza facile creare file .xlsx nella lingua che preferisci. Se i tuoi utenti stanno ancora utilizzando Excel 2003 per qualche motivo (comune quando questa domanda è stata inizialmente posta, ma si spera non molto probabile oggi), ci sono anche alcune opzioni che producono .xls. Per le persone che si imbattono in questa domanda oggi, è molto probabile che tu non debba tirare la tua.
John Y

Risposte:


129

Non esiste un modo semplice per controllare la formattazione applicata da Excel all'apertura di un file .csv. Tuttavia, di seguito sono elencati tre approcci che potrebbero aiutare.

La mia preferenza è la prima opzione.

Opzione 1: modifica i dati nel file

È possibile modificare i dati nel file .csv come segue ..., = "005" , ... Questo verrà visualizzato in Excel come ..., 005 , ...

Excel manterrà i dati come formula, ma la copia della colonna e l'utilizzo di valori speciali Incolla eliminerà la formula ma manterrà la formattazione

Opzione 2 : formattare i dati

Se si tratta semplicemente di un problema di formato e tutti i dati in quella colonna hanno una lunghezza di tre cifre. Quindi apri i dati in Excel e quindi formatta la colonna contenente i dati con questo formato personalizzato 000

Opzione 3 : modifica l'estensione del file in .dif (formato di scambio dati)

Modificare l'estensione del file e utilizzare la procedura guidata di importazione dei file per controllare i formati. I file con estensione .dif vengono aperti automaticamente da Excel quando si fa doppio clic su.

Passo dopo passo:

  • Modificare l'estensione del file da .csv a .dif
  • Fare doppio clic sul file per aprirlo in Excel.
  • Verrà avviata la "Procedura guidata di importazione file".
  • Impostare il "Tipo di file" su "Delimitato" e fare clic sul pulsante "Avanti".
  • In Delimitatori, seleziona "Virgola" e fai clic sul pulsante "Avanti".
  • Fare clic su ciascuna colonna dei dati visualizzata e selezionare un "Formato dati colonna". La colonna con il valore "005" deve essere formattata come "Testo".
  • Fare clic sul pulsante Fine, il file verrà aperto da Excel con i formati che hai specificato.

8
.dif non ha funzionato sulla mia macchina; l'apertura manuale con Excel 2007 non ha funzionato (mi ha avvertito che il tipo di file era diverso dall'estensione) e sembra che .DIF sia associato a Quicktime su molti computer. Solo FYI :) In caso contrario, ottimi consigli!
Nicholas

15
Penso che l'opzione 1 sia la migliore, se vuoi un modo semplice per generare un file che "funziona" - cioè si apre sul computer dell'utente in Excel senza che gli sia richiesto di fare alcun lavoro aggiuntivo.
Kip

Ho lo stesso problema e nessuno dei precedenti è appropriato, mi dispiace. Penso che potrei esportare come XML e usare XSLT per andare in CSV. Ho bisogno che il file CSV sia corretto in modo che possa essere importato in un'altra applicazione
Matt

1
Tieni presente che l'opzione 1 non è sempre buona, se hai una cella di diciamo "1E02, qualunque testo" e poi metti un uguale davanti, Excel immaginerà che tu abbia inserito una formula. Innanzitutto la formula sarà sbagliata, ma in secondo luogo e, soprattutto, dividerà il testo su 2 celle.
ghiscoding

1
Grazie per l'opzione 1. Risolto il mio problema di notazione scientifica senza alcun lavoro aggiuntivo.
NaN

28

Non usare CSV, usa SYLK.
http://en.wikipedia.org/wiki/SYmbolic_LinK_(SYLK)

Offre molto più controllo sulla formattazione ed Excel non proverà a indovinare il tipo di un campo esaminando il contenuto. Sembra un po 'complicato, ma puoi farla franca usando un sottoinsieme molto piccolo.


2
+1 Scrivere su SYLK è semplice da implementare, l'ho fatto da principiante.
Matt H

1
Non sapevo di questo formato. Sembra qualcosa che potrei usare. +1 per questo!
Buggabill

+1 Mi ci sono voluti cinque minuti per passare da CSV a SYLK. D'ora in poi il mio formato di output goto!
TheFish

@xamde, hai ragione. È strano che non abbiano mai esteso il formato per supportarlo, come hanno fatto con RTF.
Mark Ransom

WTF, o quello che qualcuno lo consiglierebbe, cito da Wikipedia: "Microsoft non pubblica una specifica SYLK".
sorin

14

Funziona con Microsoft Office 2010, Excel versione 14

Ho letto male la preferenza dell'OP di "fare qualcosa per il file stesso". Lo tengo ancora per coloro che desiderano una soluzione per formattare direttamente l'importazione

  1. Apri un file vuoto (nuovo) (File -> Nuovo dalla cartella di lavoro)
  2. Apri l'Importazione guidata (Dati -> Da testo)
  3. Seleziona il tuo file .csv e importa
  4. Nella finestra di dialogo, scegli "Delimitato" e fai clic su Avanti.
  5. Scegli i tuoi delimitatori (deseleziona tutto tranne "virgola"), scegli i tuoi qualificatori di testo (probabilmente {Nessuno}), fai clic su Avanti
  6. Nel campo Anteprima dati seleziona la colonna che desideri sia testo. Dovrebbe evidenziare.
  7. Nel campo Formato dati colonna , seleziona "Testo".
  8. Fare clic su Fine.


2

Puoi semplicemente formattare l'intervallo come Testo.

Inoltre ecco un bell'articolo sui formati dei numeri e su come programmarli.


Ciò influirà solo sulla modalità di visualizzazione del valore. Devi convertirlo in testo, con una formula o durante l'importazione, con uno dei tanti metodi goven in questo thread
leo

2

In realtà ho scoperto che, almeno a partire da Office 2003, è possibile salvare un foglio di calcolo Excel come file XML. Quindi, posso produrre un file XML e quando faccio doppio clic su di esso, verrà aperto in Excel. Fornisce lo stesso livello di controllo di SYLK, ma la sintassi XML è più intuitiva.


2

L'aggiunta di uno spazio unificatore nella cella potrebbe aiutare. Per esempio: "firstvalue";"secondvalue";"005 ";"othervalue"

Forza Excel a trattarlo come un testo e lo spazio non è visibile. Su Windows puoi aggiungere uno spazio unificatore premendo alt + 0160. Vedi qui per maggiori informazioni: http://en.wikipedia.org/wiki/Non-breaking_space

Ho provato su Excel 2010. Spero che questo possa aiutare le persone che cercano ancora una soluzione abbastanza adeguata per questo problema.


2

Ho riscontrato questo problema durante l'esportazione di dati CSV da codice C # e l'ho risolto anteponendo i dati dello zero iniziale con il carattere di tabulazione \ t, quindi i dati sono stati interpretati come testo anziché come numerico in Excel (ma a differenza di anteporre altri caratteri, non sarebbe ' essere visto).

Mi piaceva l'approccio = "001", ma ciò non consentiva di reimportare nuovamente i dati CSV esportati nella mia applicazione C # senza rimuovere tutta questa formattazione dal file CSV di importazione (invece mi limiterò a tagliare i dati di importazione) .


1

Credo che quando importi il ​​file puoi selezionare il tipo di colonna. Rendilo testo anziché numero. Tuttavia, al momento non ho una copia di fronte a me da controllare.


1

Carica csv in oleDB e forza la stringa di tutti i tipi di dati dedotti

Ho fatto la stessa domanda e poi ho risposto con il codice.

fondamentalmente quando il file csv viene caricato, il driver oledb fa delle ipotesi, puoi dirgli quali ipotesi fare.

Il mio codice costringe tutti i tipi di dati a stringere però ... è molto facile cambiare lo schema. per i miei scopi ho usato un xslt per ottenere ti come volevo, ma sto analizzando un'ampia varietà di file.


1

So che questa è una vecchia domanda, ma ho una soluzione che non è elencata qui.

Quando produci il csv aggiungi uno spazio dopo la virgola ma prima del tuo valore es , 005,.

Ciò ha funzionato per impedire comunque la formattazione automatica della data in Excel 2007.


2
Appena testato, non sembra funzionare con Excel 2007 e una colonna numerica. : - /
Norman H

1

Il metodo dell'Importazione guidata testo NON funziona quando il file CSV importato contiene interruzioni di riga all'interno di una cella. Questo metodo gestisce questo scenario (almeno con dati delimitati da tabulazioni):

  1. Crea un nuovo file Excel
  2. Ctrl + A per selezionare tutte le celle
  3. Nella casella combinata Formato numero, seleziona Testo
  4. Apri il file delimitato da tabulazioni nell'editor di testo
  5. Seleziona tutto, copia e incolla in Excel


1

Questo mi ha fatto impazzire tutto il giorno (dal momento che in effetti non puoi controllare i tipi di colonne di Excel prima di aprire il file CSV), e questo ha funzionato per me, usando VB.NET ed Excel Interop:

        'Convert .csv file to .txt file.
        FileName = ConvertToText(FileName)

        Dim ColumnTypes(,) As Integer = New Integer(,) {{1, xlTextFormat}, _
                                                        {2, xlTextFormat}, _
                                                        {3, xlGeneralFormat}, _
                                                        {4, xlGeneralFormat}, _
                                                        {5, xlGeneralFormat}, _
                                                        {6, xlGeneralFormat}}

        'We are using OpenText() in order to specify the column types.
        mxlApp.Workbooks.OpenText(FileName, , , Excel.XlTextParsingType.xlDelimited, , , True, , True, , , , ColumnTypes)
        mxlWorkBook = mxlApp.ActiveWorkbook
        mxlWorkSheet = CType(mxlApp.ActiveSheet, Excel.Worksheet)


Private Function ConvertToText(ByVal FileName As String) As String
    'Convert the .csv file to a .txt file.
    'If the file is a text file, we can specify the column types.
    'Otherwise, the Codes are first converted to numbers, which loses trailing zeros.

    Try
        Dim MyReader As New StreamReader(FileName)
        Dim NewFileName As String = FileName.Replace(".CSV", ".TXT")
        Dim MyWriter As New StreamWriter(NewFileName, False)
        Dim strLine As String

        Do While Not MyReader.EndOfStream
            strLine = MyReader.ReadLine
            MyWriter.WriteLine(strLine)
        Loop

        MyReader.Close()
        MyReader.Dispose()
        MyWriter.Close()
        MyWriter.Dispose()

        Return NewFileName
    Catch ex As Exception
        MsgBox(ex.Message)
        Return ""
    End Try

End Function

0

Quando si apre un CSV, viene visualizzata la procedura guidata di importazione del testo. Nell'ultimo passaggio della procedura guidata, dovresti essere in grado di importare la colonna specifica come testo, mantenendo così il prefisso "00". Dopodiché puoi formattare la cella come preferisci.

Ho provato con Excel 2007 e sembrava funzionare.


1
Excel 2003 non visualizza la procedura guidata.
Sergey Stadnik

0

Bene, Excel non fa mai apparire la procedura guidata per i file CSV. Se lo rinomini in .txt, vedrai la procedura guidata quando fai un File> Apri in Excel la prossima volta.


0

Metti una sola virgoletta prima del campo. Excel lo tratterà come testo, anche se sembra un numero.

...,`005,...

EDIT: questo è sbagliato. Il trucco dell'apostrofo funziona solo quando si immettono i dati direttamente in Excel. Quando lo usi in un file CSV, nel campo viene visualizzato l'apostrofo, cosa che non desideri.

http://support.microsoft.com/kb/214233


5
Questo è qualcosa che le persone probabilmente proveranno. Quindi sapere che non funzionerà è utile e fa risparmiare tempo.
AndyM
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.