Impedisci a Excel di convertire automaticamente determinati valori di testo in date


526

Qualcuno capisce se esiste un token che posso aggiungere al mio CSV per un determinato campo in modo che Excel non tenti di convertirlo in una data?

Sto provando a scrivere un file .csv dalla mia applicazione e uno dei valori sembra abbastanza simile a una data in cui Excel lo converte automaticamente dal testo in una data. Ho provato a mettere tutti i miei campi di testo (incluso quello che sembra una data) tra virgolette doppie, ma questo non ha alcun effetto.


120
Sì, come quando un file con 10000 nomi utente ha uno come "april25", che viene convertito in una data e alla fine viene elaborato come "25 aprile", con conseguente errore "nome utente non trovato", perché non è stato si aspettano che Excel converta un singolo valore in una data, 4000 record nel file, lasciando il resto del testo. Che codice di lettura CSV zoppo; davvero, non dovrebbe indovinare il tipo in base ai primi record X e attenersi ad esso? O lascia tutto il testo. Se lo voglio formattato come "generale", posso sceglierlo in seguito. Assumendo "generale" fin dall'inizio, rischia la corruzione dei dati di testo.
Triynko,

Ho avuto il problema quando facevo copia e incolla. Per tutte le ricerche della soluzione, selezionare la colonna di destinazione, impostarla su un formato stringa / testo, quindi copiare l'origine ed eseguire un incolla speciale (clic con il tasto destro) con 'solo valori'. Conserva i valori, nessuna formattazione della data.
Kai Noack,

84
Voglio solo aggiungere che considero questo comportamento di Excel un grave difetto. Che dire di tutte le persone che non hanno il lusso di cambiare il contenuto del file CSV prima dell'importazione in Excel? O che dire delle persone che non si rendono conto di questo problema fino a dopo aver apportato molte altre modifiche al file CSV? Rende un casino il lavoro con i file CSV in Excel.
rapina il

Stai usando DatatableJS? Perché so già come farlo con quell'API. Se avete bisogno di questo si può trovare qui: stackoverflow.com/a/36142043/4241058
Richard Rebeco

11
Tutte queste soluzioni per usare File -> Apri -> Importa funzionano bene per noi perché sappiamo cosa stiamo facendo, ma è inutile per l'altro 99,5% del mondo che non capisce la navigazione nel filesystem da / all'interno / un applicazione. Vedono un file, per usarlo fanno doppio clic su di esso. Ho trascorso 25 anni a insegnare alle persone come usare le applicazioni per ufficio e scrivere codice che genera dati per tali applicazioni per ufficio, e usare / application / per cercare il file da usare è completamente al di là di quasi tutti.
user2624417

Risposte:


355

Ho scoperto che mettere un '=' prima delle doppie virgolette realizzerà quello che vuoi. Forza i dati in testo.

per esempio. = "2008-10-03", = "più testo"

EDIT (secondo altri post) : a causa del bug di Excel 2007 notato da Jeffiekins si dovrebbe usare la soluzione proposta da Andrew :"=""2008-10-03"""


12
Sto accettando questa risposta perché 1) il mio file CSV verrà utilizzato solo da Excel e 2) questo è per la contabilità e non può avere un 'all'inizio, e 3) Non voglio che debbano farlo un'importazione. Voglio solo che aprano il CSV.

5
Grande! Ma a causa del 2007 bug di Excel utilizzare la soluzione proposta da Andrew : "=""2008-10-03""". Aggiornato il post.
TMS

1
Questo non funziona per me in Excel 2010 se il testo è troppo lungo :(
steve

7
Il motivo per cui funziona è perché quando Excel vede il carattere "=" decide di valutare l'espressione che lo segue. In questo caso l'espressione è semplicemente una stringa letterale e il valore di una stringa letterale è il contenuto della stringa. Pertanto le virgolette scompaiono magicamente. Puoi mettere = 1 + 2 + 3 e ottenere il valore 6 dopo l'importazione CSV. La formula stessa non viene distrutta nel processo di importazione.
lokori,

4
C'è un grosso problema con questo approccio: se apri il file in Excel e lo modifichi, quindi salvi e riapri tutti questi "scompare
ACV

150

So che questa è una vecchia domanda, ma il problema non si risolverà presto. I file CSV sono facili da generare dalla maggior parte dei linguaggi di programmazione, piuttosto piccoli, leggibili dall'uomo in un attimo con un semplice editor di testo e onnipresente.

Il problema non riguarda solo le date nei campi di testo, ma anche qualsiasi cosa numerica viene convertita da testo in numeri. Un paio di esempi in cui questo è problematico:

  • CAP / codici postali
  • numeri di telefono
  • numeri identificativi del governo

che a volte può iniziare con uno o più zeri (0), che vengono eliminati quando convertiti in numerici. Oppure il valore contiene caratteri che possono essere confusi con operatori matematici (come nelle date: /, -).

Due casi a cui posso pensare che la soluzione "prepending =", come menzionato in precedenza, potrebbe non essere l'ideale è

  • dove il file potrebbe essere importato in un programma diverso da MS Excel (viene in mente la funzione Stampa unione di MS Word),
  • dove la leggibilità umana potrebbe essere importante.

Il mio hack per aggirare questo

Se uno pre / aggiunge un carattere non numerico e / o non di data nel valore, il valore verrà riconosciuto come testo e non convertito. Un carattere non stampabile sarebbe buono in quanto non altererà il valore visualizzato. Tuttavia, il semplice vecchio carattere spaziale (\ s, ASCII 32) non funziona per questo in quanto viene tagliato da Excel e quindi il valore viene ancora convertito. Ma ci sono vari altri caratteri nello spazio di stampa e non che funzionano bene. Il più semplice tuttavia è aggiungere (aggiungere dopo) il carattere di tabulazione semplice (\ t, ASCII 9).

Vantaggi di questo approccio:

  • Disponibile da tastiera o con un codice ASCII facile da ricordare (9),
  • Non disturba l'importazione,
  • Normalmente non disturba i risultati di Stampa unione (a seconda del layout del modello, ma normalmente aggiunge solo un ampio spazio alla fine di una riga). (Se questo è comunque un problema, osserva altri caratteri, ad esempio lo spazio di larghezza zero (ZWSP, Unicode U + 200B)
  • non è un grosso ostacolo quando si visualizza il CSV in Blocco note (ecc.),
  • e potrebbe essere rimosso da trova / sostituisci in Excel (o Blocco note ecc.).
  • Non è necessario importare il CSV, ma è sufficiente fare doppio clic per aprire il CSV in Excel.

Se c'è una ragione per cui non vuoi usare la scheda, cerca in una tabella Unicode qualcos'altro adatto.

Un'altra opzione

potrebbe essere quello di generare file XML, per i quali un certo formato è accettato anche per l'importazione dalle versioni più recenti di MS Excel e che consente molte più opzioni simili al formato .XLS, ma non ho esperienza con questo.

Quindi ci sono varie opzioni. A seconda delle esigenze / dell'applicazione, una potrebbe essere migliore di un'altra.


aggiunta

Bisogna dire che le versioni più recenti (2013+) di MS Excel non aprono più il file CSV in formato foglio di calcolo - un ulteriore rallentamento nel flusso di lavoro che rende Excel meno utile ... Almeno, esistono istruzioni per aggirarlo. Vedi ad esempio questo StackOverflow: come visualizzare correttamente i file .csv in Excel 2013? .


6
Ho ottenuto gli zeri iniziali corretti dopo aver aggiunto il \tmio carattere di separazione ;... maledizione a MS Office, perché mi ci sono voluti più di 2 minuti per capire?
Morten Jensen,

2
L'aggiunta di \ t alla fine di tutti i valori fa davvero il trucco. È una soluzione alternativa, ma in pratica funziona bene. Preferisco questo al trucco della formula con uguale '=', perché il primo potrebbe essere difficile lavorare con altri strumenti.
ocroquette,

3
Non ci sono abbastanza voti che possano esprimere la mia gratitudine per te. Cerca e sostituisci in notepad ++ ',' in '\ t, \ t' (per adattarsi anche alla prima e all'ultima colonna) funziona come un incantesimo. Grazie.
Asaf

1
Nella mia query MySQL (per output CSV tramite PHP), ho usato CONCAT ('\ t', column_name). Anche il trucco. Grazie!
Just Plain High,

1
Grande idea. Ahimè, Numbers è un po 'più "intelligente" di Excel e non rientra nel trucco delle schede. La migliore alternativa che posso trovare è un vantaggio ', dal momento che è un po 'ben compreso e non troppo distratto ... ma un invisibile sarebbe meglio.
Heath Raftery,

101

Lavorando sulla soluzione di Jarod e sul problema sollevato da Jeffiekins, è possibile modificare

"May 16, 2011"

per

"=""May 16, 2011"""

6
Non funziona in Excel 2010 se il testo è più lungo di una certa lunghezza.
steve

1
@Andrew, questa "correzione" causerà problemi se devi avere "valori ovunque tra la data.
Pacerier,

8
Cordiali saluti, se si salva il file Excel il = scompare e si torna al punto di partenza uno alla successiva apertura.
d512

La mia esperienza non corrisponde né a steve né a d512. Funziona per me nel .csv in arrivo in Excel 2013 e dopo il salvataggio come .xlsx non ripristina. Abbastanza facile da consentire a chiunque di testare utilizzando questa riga di dati: "806676", "Nessuno", "41", "=" "16 maggio 2011" "", "100,00", "Falso"
tbc0

1
@ tbc0 Prova "806676","None","41","=""05-16-2011""","100.00","False"invece e vedrai un salvataggio e ricaricare perde il testo sillabato.
NetMage,

65

Ho avuto un problema simile e questa è la soluzione che mi ha aiutato senza dover modificare il contenuto del file CSV:

Se hai la flessibilità di nominare il file in modo diverso da ".csv", puoi nominarlo con un'estensione ".txt", come "Myfile.txt" o "Myfile.csv.txt". Quindi quando lo apri in Excel (non trascinandolo, ma usando File-> Apri o l'elenco dei file utilizzati più di recente), Excel ti fornirà un "Importazione guidata testo".

Nella prima pagina della procedura guidata, selezionare "Delimitato" per il tipo di file.

Nella seconda pagina della procedura guidata scegli "," come delimitatore e scegli anche il qualificatore di testo se hai racchiuso i tuoi valori tra virgolette

Nella terza pagina, seleziona ogni colonna singolarmente e assegna a ciascuna il tipo "Testo" invece di "Generale" per impedire a Excel di rovinare i tuoi dati.

Spero che questo aiuti te o qualcuno con un problema simile!


2
Oh, a proposito non sono il primo a scoprirlo. risingline.com/use-excel-read-csv-without-reformatting.php Quella pagina Web ha anche le istruzioni utili che puoi spostare tenendo premuto il tasto Maiusc + clic sulle colonne nella terza pagina della procedura guidata per selezionarle tutte insieme prima di assegnare a ciascuna il tipo "Testo".
rainerbit,

Questo può funzionare per i valori di data, ma non sembra funzionare per cose che Excel interpreta come numerico. Se la stringa è composta da numeri e virgole, il formato "Testo" sarà formato numerico scientifico.
Michael - Dov'è Clay Shirky il

3
questo ha funzionato perfettamente per me e non ha comportato modifiche al mio file se non quello di rinominarlo come .txt. grazie.
Kevin,

1
Sfortunatamente, Excel ti consente di farlo solo per le prime 6 colonne. Se hai bisogno di più, un approccio migliore è copiare il contenuto del CSV, creare e svuotare il file Excel, selezionare tutte le colonne / righe e impostare il tipo su Testo, quindi incollare il contenuto e utilizzare Dati | Testo alle colonne
nachocab,

Questa è la soluzione migliore e dovrebbe essere contrassegnata come risposta.
Rob,

28

ATTENZIONE: Excel '07 (almeno) ha un bug (nother): se c'è una virgola nel contenuto di un campo, non analizza correttamente il "campo, contenuto", ma piuttosto inserisce tutto dopo la virgola nel campo seguente, indipendentemente dalle virgolette.

L'unica soluzione che ho scoperto che funziona è eliminare il = quando il contenuto del campo include una virgola.

Ciò può significare che ci sono alcuni campi che sono impossibili da rappresentare esattamente "giusti" in Excel, ma ormai credo che nessuno sia troppo sorpreso.


Ho appena provato questo in Excel 2007 e funziona correttamente per me. Tuttavia, se c'è uno spazio iniziale prima delle virgolette, non analizza correttamente la virgola.
Sunny88,

8
Questo non sembra essere un bug secondo RFC 4180. Il modo corretto di citare il campo è di citare l'intero campo e quindi di citare due virgolette interne. Quindi "=" "campo, contenuto" "" tools.ietf.org/html/rfc4180
Peter Stephens,

2
@PeterStephens, Questo non funziona se field, contentha al "suo interno. Ad esempio"=""field, co""ntent"""
Pacerier

1
@Pacerier Probabilmente la citazione incorporata deve essere racchiusa tra virgolette doppie, trasformandosi in """".
ErikE

Posso confermare che il suggerimento di @ ErikE è corretto. Per un campo con valore 1"2, se scegli di usare questo trucco (invece di lasciarlo come "1""2"nel file - Excel sarebbe già trattato come testo), la stringa corretta finale nel file CSV con targeting Excel finisce essere "=""1""""2""".
Tao,

22

Durante la creazione della stringa da scrivere nel mio file CSV in C # ho dovuto formattarla in questo modo:

"=\"" + myVariable + "\""

2
questo mi ha svegliato anche in Rails. Grazie
Vieenay Siingh,

3
Funziona anche su Java
Shoyo,

Ha funzionato per me in JavaScript usando Papa Parse.
Wobsoriano,

17

2018

L'unica soluzione corretta che ha funzionato per me (e anche senza modificare il CSV ).

Excel 2010:

  1. Crea una nuova cartella di lavoro
  2. Dati> Da testo> Seleziona il tuo file CSV
  3. Nel popup, seleziona il pulsante di opzione "Delimitato", quindi fai clic su "Avanti>"
  4. Caselle di controllo delimitatori: selezionare solo "Virgola" e deselezionare le altre opzioni, quindi fare clic su "Avanti>"
  5. In "Anteprima dati", scorri fino all'estrema destra, quindi tieni premuto MAIUSC e fai clic sull'ultima colonna (questo selezionerà tutte le colonne). Ora nel "Formato dati colonna" seleziona il pulsante di opzione "Testo", quindi fai clic su "Fine".

Excel office365: (versione client)

  1. Crea una nuova cartella di lavoro
  2. Dati> Da testo / CSV> Seleziona il tuo file CSV
  3. Rilevamento del tipo di dati> non rilevare

Nota: Excel Office365 (versione web), mentre sto scrivendo questo, non sarai in grado di farlo.


3
Funziona senza cambiare prima i file CSV, quindi penso che questa dovrebbe essere la risposta corretta.
Jack

Questa sembra la risposta corretta. Avevo grandi speranze. Ma su MacOS (office365), non riesco a selezionare TUTTE le colonne: non c'è scorrimento orizzontale nella finestra di anteprima mostrata nella procedura guidata di importazione del testo, in modo da poter selezionare solo le colonne visibili. Ho provato scorciatoie (CMD + A, o altre cose), senza risultati. L'opzione "non rilevare" non esiste neanche. Sono devastato
normanio

Excel Office 365, selezionare File, Opzioni, Dati. Ci sono caselle di controllo per mostrare le procedure guidate di importazione dei dati legacy, se necessario.
Kurt Schultz,

15

In Excel 2010 apri un nuovo foglio. Nella barra multifunzione dei dati fare clic su "Ottieni dati esterni dal testo". Seleziona il tuo file CSV quindi fai clic su "Apri". Fai clic su "Avanti". Deseleziona "Tab", metti un segno di spunta accanto a "Virgola", quindi fai clic su "Avanti". Fai clic in un punto qualsiasi della prima colonna. Tenendo premuto il tasto Maiusc, trascina il cursore fino a quando non puoi fare clic nell'ultima colonna, quindi rilascia il tasto Maiusc. Fai clic sul pulsante di opzione "testo", quindi fai clic su "Fine"

Tutte le colonne verranno importate come testo, proprio come nel file CSV.


1
Ho riscontrato uno stesso problema, ma seguire attentamente le istruzioni di @ Rob avrebbe funzionato perfettamente !. Grazie
Milacay

2
Purtroppo l'assistente dati da testo non supporta celle multilinea. Se viene rilevato un tale testo su più righe, tutte le righe dopo la prima verranno scritte in nuove righe, interrompendo l'intera importazione. Interpreta correttamente le interruzioni di riga solo se si apre il file CSV facendo doppio clic. Accidenti a te Microsoft ...
CodeManX il

1
Sfortunatamente questo non risolve il problema della "guida" di formattazione casuale di Excel - il testo DEC1 è ancora cambiato alla data dic-01. Lo stesso con il testo di AAAA-MM-GG commutato su GG / MM / AAAA. :(
Baracus

12

Ancora un problema nella versione di Microsoft Office 2016, piuttosto inquietante per quelli di noi che lavorano con nomi di geni come MARC1, MARCH1, SEPT1 ecc. La soluzione che ho trovato essere la più pratica dopo aver generato un file ".csv" in R, che verrà quindi aperto / condiviso con gli utenti di Excel:

  1. Apri il file CSV come testo (blocco note)
  2. Copialo (ctrl + a, ctrl + c).
  3. Incollalo in un nuovo foglio Excel: incollerà tutti in una colonna come stringhe di testo lunghe.
  4. Scegli / seleziona questa colonna.
  5. Vai a Dati- "Testo nelle colonne ...", nella finestra aperta scegli "delimitato" (successivo). Verifica che la "virgola" sia contrassegnata (contrassegnandola mostrerà già la separazione dei dati nelle colonne sottostanti) (successiva), in questa finestra puoi scegliere la colonna che desideri e contrassegnarla come testo (invece che generale) (Fine).

HTH


Anche lo sforzo manuale non mi è piaciuto. Tuttavia, dopo aver esaurito tutte le possibilità a portata di mano, questa era la più robusta e affidabile.
Ana Maria Mendes-Pereira,

Elaborazione batch comunque.
Ana Maria Mendes-Pereira,

Questa è in realtà la migliore risposta qui che richiede la minima quantità di lavoro. Vorrei che tu potessi semplicemente impostare qualche opzione per costringerlo a non analizzare il file.
lancia il

Puoi anche sostituire tutte le virgole con le schede, quindi si delimita automaticamente
passa il

10

Ecco il semplice metodo che usiamo al lavoro qui quando si genera il file csv in primo luogo, cambia un po 'i valori quindi non è adatto a tutte le applicazioni:

Prepara uno spazio a tutti i valori nel CSV

Questo spazio verrà rimosso da Excel da numeri come "1", "2.3" e "-2.9e4" ma rimarrà in date come "01/10/1993" e booleani come "TRUE", impedendo che vengano convertiti in i tipi di dati interni di Excel.

Impedisce anche che le doppie virgolette vengano zappate al momento della lettura, quindi un modo infallibile di rendere il testo in un CSV rimane invariato da Excel ANCHE SE un testo come "3.1415" è circondarlo con virgolette doppie e anteporre l'intera stringa con uno spazio, cioè (usando virgolette singole per mostrare ciò che si digita) '"3.1415"'. Quindi in Excel hai sempre la stringa originale, tranne che è racchiusa tra virgolette doppie e preceduta da uno spazio, quindi devi tener conto di quelli in qualsiasi formula ecc.


Questo ha funzionato per me. Ho avuto alcuni valori come 1-1-1 che vengono convertiti automaticamente in date. Come accennato, lo spazio verrà trasferito, quindi il valore viene modificato, ma faccio una striscia su di esso quando analizzo, quindi per me non è un grosso problema.
jacklin

Lo spazio non funziona più per impedire l'interpretazione della data o lo stripping degli zeri iniziali. Ma puoi usare uno spazio non-break "\xA0"- che funzionerà.
Doin,

8

(Supponendo Excel 2003 ...)

Quando si utilizza la procedura guidata Text-to-Columns, al passaggio 3 è possibile dettare il tipo di dati per ciascuna delle colonne. Fai clic sulla colonna nell'anteprima e modifica la colonna che si comporta male da "Generale" a "Testo".


8
Questa è una scelta eccellente se potessi forzare l'utente a utilizzare il processo di importazione.

Questo in realtà non aiuta il problema, poiché i numeri nella colonna TESTO verranno convertiti in NUMERI quando si esportano comunque in .csv ...
Chonez

8

Questo è l'unico modo in cui so come farlo senza fare confusione nel file stesso. Come al solito con Excel, l'ho imparato battendo la testa sulla scrivania per ore.

Cambia l'estensione del file .csv in .txt; questo impedirà ad Excel di convertire automaticamente il file quando viene aperto. Ecco come lo faccio: apro Excel in un foglio di lavoro vuoto, chiudo il foglio bianco, quindi File => Apri e scegli il tuo file con l'estensione .txt. Questo costringe Excel ad aprire "Importazione guidata testo" dove ti farà domande su come vuoi che interpreti il ​​file. Prima scegli il tuo delimitatore (virgola, tab, ecc ...), quindi (ecco la parte importante) scegli un set di colonne di colonne e seleziona la formattazione. Se vuoi esattamente ciò che è nel file, scegli "Testo" ed Excel visualizzerà esattamente ciò che è tra i delimitatori.


Questo ha funzionato bene per me il 03-03-2015 lavorando con Excel per Mac 2011 (versione 14.4.8 150116), lavorando con i dati nella domanda SO awk- evita la riformattazione di valori simili a una data , dove il problema è piuttosto con Excel che awk, nonostante il titolo della domanda.
Jonathan Leffler

4

(EXCEL 2007 e versioni successive)

Come forzare Excel a non "rilevare" i formati di data senza modificare il file di origine

O:

  • rinominare il file come .txt
  • Se non riesci a farlo, invece di aprire il file CSV direttamente in Excel, crea una nuova cartella di lavoro, quindi vai a
    Data > Get external data > From Text
    e seleziona il tuo CSV.

In entrambi i casi, ti verranno presentate le opzioni di importazione, seleziona semplicemente ogni colonna contenente le date e indica a Excel di formattare come "testo" non "generale".


4

Quello che ho fatto per questo stesso problema è stato aggiungere quanto segue prima di ogni valore CSV: "=" "" e una virgoletta doppia dopo ogni valore CSV, prima di aprire il file in Excel. Prendi ad esempio i seguenti valori:

012345,00198475

Questi dovrebbero essere modificati prima dell'apertura in Excel per:

"="""012345","="""00198475"

Dopo aver fatto ciò, ogni valore di cella viene visualizzato come una formula in Excel e quindi non verrà formattato come numero, data, ecc. Ad esempio, un valore di 012345 viene visualizzato come:

="012345"

Un altro approccio è la memorizzazione del numero nel CSV come 1234500198475E-8; in questo modo saranno ancora possibili ulteriori calcoli in Excel.
Bert Bruynooghe,

4

Nessuna delle soluzioni offerte qui è una buona soluzione. Può funzionare per singoli casi, ma solo se hai il controllo del display finale. Prendi il mio esempio: il mio lavoro produce un elenco di prodotti che vendono al dettaglio. Questo è in formato CSV e contiene codici parte, alcuni dei quali iniziano con zero, impostati dai produttori (non sotto il nostro controllo). Elimina gli zeri iniziali e potresti effettivamente abbinare un altro prodotto. I clienti al dettaglio desiderano l'elenco in formato CSV a causa dei programmi di elaborazione back-end, che sono anche fuori dal nostro controllo e diversi per cliente, quindi non possiamo modificare il formato dei file CSV. Nessun prefisso "=", né schede aggiunte. I dati nei file CSV non elaborati sono corretti; è quando i clienti aprono quei file in Excel iniziano i problemi. E molti clienti non sono davvero esperti di computer. Possono semplicemente aprire e salvare un allegato e-mail. Stiamo pensando di fornire i dati in due formati leggermente diversi: uno come Excel Friendly (utilizzando le opzioni suggerite sopra aggiungendo un TAB, l'altro come 'master'. Ma questo potrebbe essere un pio desiderio perché alcuni clienti non capiranno perché dobbiamo farlo. Nel frattempo continuiamo a spiegare perché a volte vedono dati "errati" nei loro fogli di calcolo. Fino a quando Microsoft non apporta una modifica adeguata, non vedo una soluzione adeguata a questo, purché non si abbia il controllo su come gli utenti finali usa i file. Ma questo può essere un pio desiderio poiché alcuni clienti non capiranno perché dobbiamo farlo. Nel frattempo continuiamo a spiegare perché a volte vedono dati "errati" nei loro fogli di calcolo. Fino a quando Microsoft non apporta una modifica adeguata, non vedo alcuna risoluzione adeguata a questo, purché non si abbia il controllo su come gli utenti finali utilizzano i file. Ma questo può essere un pio desiderio poiché alcuni clienti non capiranno perché dobbiamo farlo. Nel frattempo continuiamo a spiegare perché a volte vedono dati "errati" nei loro fogli di calcolo. Fino a quando Microsoft non apporta una modifica adeguata, non vedo una soluzione adeguata a questo, purché non si abbia il controllo su come gli utenti finali utilizzano i file.


Se uno spazio aggiuntivo a sinistra dei tuoi dati non ha importanza, puoi risolvere i problemi di Excel anteponendo "\xA0"(spazio non interrotto) ai tuoi dati.
Doin,

3

Questa settimana ho appena incontrato questa convenzione, che sembra essere un approccio eccellente, ma non riesco a trovarla referenziata da nessuna parte. Qualcuno lo conosce? Puoi citarne una fonte? Non ho cercato ore e ore, ma spero che qualcuno riconoscerà questo approccio.

Esempio 1: = ("012345678905") viene visualizzato come 012345678905

Esempio 2: = ("1954-12-12") viene visualizzato come 1954-12-12 , non 12/12/1954 .


2

Non è Excel. Windows riconosce la formula, i dati come una data e si corregge automaticamente. Devi modificare le impostazioni di Windows.

"Pannello di controllo" (-> "Passa alla visualizzazione classica") -> "Opzioni internazionali e della lingua" -> scheda "Opzioni regionali" -> "Personalizza ..." -> scheda "Numeri" -> E poi cambia i simboli secondo quello che vuoi.

http://www.pcreview.co.uk/forums/enable-disable-auto-convert-number-date-t3791902.html

Funzionerà sul tuo computer, se queste impostazioni non vengono modificate ad esempio sul computer dei tuoi clienti vedranno le date invece dei dati.


2

Ciao ho lo stesso problema

Scrivo questo vbscipt per creare un altro file CSV. Il nuovo file CSV avrà uno spazio nel carattere di ciascun campo, quindi Excel lo comprenderà come testo.

Quindi si crea un file .vbs con il codice seguente (ad esempio Modify_CSV.vbs), lo si salva e si chiude. Trascina e rilascia il file originale nel file vbscript. Creerà un nuovo file con "SPACE_ADDED" per il nome del file nella stessa posizione.

Set objArgs = WScript.Arguments

Set objFso = createobject("scripting.filesystemobject")

dim objTextFile
dim arrStr ' an array to hold the text content
dim sLine  ' holding text to write to new file

'Looping through all dropped file
For t = 0 to objArgs.Count - 1
    ' Input Path
    inPath = objFso.GetFile(wscript.arguments.item(t))

    ' OutPut Path
    outPath = replace(inPath, objFso.GetFileName(inPath), left(objFso.GetFileName(inPath), InStrRev(objFso.GetFileName(inPath),".") - 1) & "_SPACE_ADDED.csv")

    ' Read the file
    set objTextFile = objFso.OpenTextFile(inPath)


    'Now Creating the file can overwrite exiting file
    set aNewFile = objFso.CreateTextFile(outPath, True) 
    aNewFile.Close  

    'Open the file to appending data
    set aNewFile = objFso.OpenTextFile(outPath, 8) '2=Open for writing 8 for appending

    ' Reading data and writing it to new file
    Do while NOT objTextFile.AtEndOfStream
        arrStr = split(objTextFile.ReadLine,",")

        sLine = ""  'Clear previous data

        For i=lbound(arrStr) to ubound(arrStr)
            sLine = sLine + " " + arrStr(i) + ","
        Next

        'Writing data to new file
        aNewFile.WriteLine left(sLine, len(sLine)-1) 'Get rid of that extra comma from the loop


    Loop

    'Closing new file
    aNewFile.Close  

Next ' This is for next file

set aNewFile=nothing
set objFso = nothing
set objArgs = nothing

2

Senza modificare il tuo file CSV puoi:

  1. Modifica l'opzione Formato celle di Excel in "testo"
  2. Quindi utilizzare la "Procedura guidata di importazione del testo" per definire le celle CSV.
  3. Una volta importati, eliminare quei dati
  4. quindi basta incollare come testo normale

Excel formatterà e separerà correttamente le celle CSV come testo formattato ignorando i formati di data automatici.

Un po 'sciocco aggirare, ma batte la modifica dei dati CSV prima dell'importazione. Andy Baird e Richard si sono in qualche modo sfuggiti a questo metodo, ma hanno perso un paio di passaggi importanti.


1

So che questo è un vecchio thread. Per quelli come me, che hanno ancora questo problema usando Office 2013 tramite l'oggetto com di PowerShell possono usare il metodo opentext . Il problema è che questo metodo ha molti argomenti, che a volte si escludono a vicenda. Per risolvere questo problema, puoi utilizzare il metodo invoke-namedparameter introdotto in questo post . Un esempio sarebbe

$ex = New-Object -com "Excel.Application"
$ex.visible = $true
$csv = "path\to\your\csv.csv"
Invoke-NamedParameter ($ex.workbooks) "opentext" @{"filename"=$csv; "Semicolon"= $true}

Purtroppo ho appena scoperto che questo metodo in qualche modo interrompe l'analisi csv quando le celle contengono interruzioni di riga. Questo è supportato da CSV, ma l'implementazione di microsoft sembra essere stata corretta. Inoltre, in qualche modo non ha rilevato caratteri specifici tedeschi. Dandogli la cultura corretta non ha cambiato questo comportamento. Tutti i file (csv e script) vengono salvati con codifica utf8. Per prima cosa ho scritto il seguente codice per inserire la cella CSV per cella.

$ex = New-Object -com "Excel.Application"
$ex.visible = $true;
$csv = "path\to\your\csv.csv";
$ex.workbooks.add();
$ex.activeWorkbook.activeSheet.Cells.NumberFormat = "@";
$data = import-csv $csv -encoding utf8 -delimiter ";"; 
$row = 1; 
$data | %{ $obj = $_; $col = 1; $_.psobject.properties.Name |%{if($row -eq1){$ex.ActiveWorkbook.activeSheet.Cells.item($row,$col).Value2= $_ };$ex.ActiveWorkbook.activeSheet.Cells.item($row+1,$col).Value2 =$obj.$_; $col++ }; $row++;}

Ma questo è estremamente lento, motivo per cui ho cercato un'alternativa. Apparentemente Excel ti consente di impostare i valori di un intervallo di celle con una matrice. Quindi ho usato l'algoritmo in questo blog per trasformare il CSV in un multiarray.

function csvToExcel($csv,$delimiter){
     $a = New-Object -com "Excel.Application"
     $a.visible = $true

    $a.workbooks.add()
     $a.activeWorkbook.activeSheet.Cells.NumberFormat = "@"
     $data = import-csv -delimiter $delimiter $csv; 
     $array = ($data |ConvertTo-MultiArray).Value
     $starta = [int][char]'a' - 1
     if ($array.GetLength(1) -gt 26) {
         $col = [char]([int][math]::Floor($array.GetLength(1)/26) + $starta) + [char](($array.GetLength(1)%26) + $Starta)
     } else {
         $col = [char]($array.GetLength(1) + $starta)
     }
     $range = $a.activeWorkbook.activeSheet.Range("a1:"+$col+""+$array.GetLength(0))
     $range.value2 = $array;
     $range.Columns.AutoFit();
     $range.Rows.AutoFit();
     $range.Cells.HorizontalAlignment = -4131
     $range.Cells.VerticalAlignment = -4160
}

 function ConvertTo-MultiArray {
     param(
         [Parameter(Mandatory=$true, Position=1, ValueFromPipeline=$true)]
         [PSObject[]]$InputObject
     )
     BEGIN {
         $objects = @()
         [ref]$array = [ref]$null
     }
     Process {
         $objects += $InputObject
     }
     END {
         $properties = $objects[0].psobject.properties |%{$_.name}
         $array.Value = New-Object 'object[,]' ($objects.Count+1),$properties.count
         # i = row and j = column
         $j = 0
         $properties |%{
             $array.Value[0,$j] = $_.tostring()
             $j++
         }
         $i = 1
         $objects |% {
             $item = $_
             $j = 0
             $properties | % {
                 if ($item.($_) -eq $null) {
                     $array.value[$i,$j] = ""
                 }
                 else {
                     $array.value[$i,$j] = $item.($_).tostring()
                 }
                 $j++
             }
             $i++
         }
         $array
     } 
} 
csvToExcel "storage_stats.csv" ";"

Puoi usare il codice sopra come dovrebbe convertire qualsiasi CSV in Excel. Basta cambiare il percorso in CSV e il carattere delimitatore in basso.


troppo complicato
lancia il

1

Nel mio caso, "Sept8" in un file CSV generato utilizzando R è stato convertito in "8 settembre" da Excel 2013. Il problema è stato risolto utilizzando la funzione write.xlsx2 () nel pacchetto xlsx per generare il file di output in formato xlsx , che può essere caricato da Excel senza conversione indesiderata. Quindi, se ti viene dato un file CSV, puoi provare a caricarlo in R e convertirlo in xlsx usando la funzione write.xlsx2 ().


Non so perché la tua risposta sia stata sottoposta a downgrade. È utile almeno per le persone che usano R. Questa risposta mi ha aiutato. Grazie :)
sriharsha KB

1

Una soluzione alternativa utilizzando Google Drive (o Numbers se sei su un Mac):

  1. Apri i dati in Excel
  2. Imposta il formato della colonna con dati errati su Testo (Formato> Celle> Numero> Testo)
  3. Carica il .csv in Google Drive e aprilo con Fogli Google
  4. Copia la colonna offensiva
  5. Incolla colonna in Excel come testo (Modifica> Incolla speciale> Testo)

In alternativa, se sei su un Mac per il passaggio 3, puoi aprire i dati in Numbers.


Questa è una soluzione sana piuttosto che lavorarci su per ore senza alcuna risoluzione.
imsrgadich,

1

(EXCEL 2016 e versioni successive, in realtà non ho provato nelle versioni precedenti)

  1. Apri una nuova pagina vuota
  2. Vai alla scheda "Dati"
  3. Fai clic su "Da testo / CSV" e scegli il tuo file CSV
  4. Controlla in anteprima se i tuoi dati sono corretti.
  5. Nel caso in cui una colonna venga convertita in data, fai clic su "modifica", quindi seleziona digita Testo facendo clic sul calendario nella parte superiore della colonna
  6. Fai clic su "Chiudi e carica"

0

Ok ho trovato un modo semplice per farlo in Excel 2003 fino al 2007. Apri una cartella di lavoro xls vuota. Quindi vai al menu Dati, importa i dati esterni. Seleziona il tuo file CSV. Passare attraverso la procedura guidata e quindi in "formato dati colonna" selezionare qualsiasi colonna che deve essere forzata a "testo". Ciò importerà l'intera colonna come formato di testo impedendo ad Excel di provare a trattare qualsiasi cella specifica come una data.


0

Questo problema è ancora presente in Mac Office 2011 e Office 2013, non posso impedirlo. Sembra una cosa così semplice.

Nel mio caso avevo valori come "1 - 2" e "7 - 12" all'interno del CSV racchiusi correttamente tra virgolette, questo si converte automaticamente in una data all'interno di Excel, se provi successivamente a convertirlo in solo testo che otterrai una rappresentazione numerica della data come 43768. Inoltre riformatta di nuovo grandi numeri trovati nei codici a barre e nei numeri EAN in numeri 123E + che non possono essere riconvertiti.

Ho scoperto che i Fogli Google di Google Drive non convertono i numeri in date. I codici a barre contengono virgole ogni 3 caratteri, ma questi possono essere facilmente rimossi. Gestisce i CSV molto bene, specialmente quando si tratta di CSV MAC / Windows.

Potrebbe salvare qualcuno prima o poi.


0

SOLUZIONE PIÙ SEMPLICE L'ho appena capito oggi.

  • Apri in Word
  • Sostituisci tutti i trattini con trattini
  • Salva e chiudi
  • Apri in Excel

Una volta terminata la modifica, è sempre possibile riaprirlo nuovamente in Word per sostituire nuovamente i trattini con trattini.


0

Lo faccio per i numeri di carta di credito che continuano a essere convertiti in notazione scientifica: finisco per importare il mio .csv in Fogli Google. Le opzioni di importazione ora consentono di disabilitare la formattazione automatica dei valori numerici. Ho impostato le colonne sensibili su Testo normale e ho scaricato come xlsx.

È un flusso di lavoro terribile, ma almeno i miei valori sono lasciati come dovrebbero essere.


Se ti preoccupi di leggere alcune delle altre risposte, vedrai che qualcuno lo ha già suggerito qui .
Alloro

Mi sono preoccupato, grazie. Indico che la selezione della formattazione automatica è una nuova parte del processo di importazione. La mia risposta fornisce un flusso di lavoro molto specifico, per coloro che, come me, sono stati costretti a utilizzare Fogli per affrontare questo problema specifico. Nella mia mente, questo meritava una risposta separata. Una piccola modifica del tono potrebbe effettivamente comportare l'interpretazione del tuo commento come utile, che è il punto centrale di questa famiglia di siti Web.
Brendonwbrown,

Ma puoi semplicemente utilizzare l'importazione di testo in Excel per importare il file CSV e non preoccuparti dei fogli, come notato in altre risposte.
NetMage,

0

Ho creato questa macro vba che sostanzialmente formatta l'intervallo di output come testo prima di incollare i numeri. Funziona perfettamente per me quando voglio incollare valori come 8/11, 23/6, 1/3 ecc. Senza che Excel li interpreti come date.

Sub PasteAsText()
' Created by Lars-Erik Sørbotten, 2017-09-17
Call CreateSheetBackup

Columns(ActiveCell.Column).NumberFormat = "@"

Dim DataObj As MSForms.DataObject
Set DataObj = New MSForms.DataObject
DataObj.GetFromClipboard

ActiveCell.PasteSpecial

End Sub

Sono molto interessato a sapere se questo funziona anche per altre persone. Ho cercato una soluzione a questo problema per un po ', ma non ho mai visto una soluzione VBA rapida prima che non includesse l'inserimento' davanti al testo di input. Questo codice conserva i dati nella sua forma originale.


-1

Se inserisci una virgola invertita all'inizio del campo, verrà interpretata come testo.

Esempio: 25/12/2008diventa'25/12/2008

È anche possibile selezionare il tipo di campo durante l'importazione.


9
Non voglio un 'all'inizio dei miei dati.

27
-1. Il "funziona solo se inserito direttamente in Excel, ma non funziona in CSV - avresti un carattere extra" nella cella di Excel dopo l'importazione.
TMS,

-1

Un metodo alternativo:

Converti il ​​formato della colonna che desideri modificare in "Testo". Seleziona tutte le celle che vuoi conservare, copia. Senza deselezionare quelle colonne, fai clic su "Modifica> Incolla speciale> Come valori"

Salva come CSV. Nota che questa deve essere l'ultima cosa che fai nel file perché quando lo riapri, si formatterà come date poiché i formati di cella non possono essere salvati nei file CSV.

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.