Evite que Excel convierta automáticamente ciertos valores de texto en fechas

526

¿Alguien sabe si hay un token que puedo agregar a mi csv para un campo determinado para que Excel no intente convertirlo en una fecha?

Estoy tratando de escribir un archivo .csv desde mi aplicación y uno de los valores se parece bastante a una fecha en que Excel lo convierte automáticamente de texto a fecha. Intenté poner todos mis campos de texto (incluido el que parece una fecha) entre comillas dobles, pero eso no tiene ningún efecto.

JimmyPena
fuente
120
Sí, como cuando un archivo con 10000 nombres de usuario tiene uno como "25 de abril", que se convierte en una fecha y finalmente se procesa como "25 de abril", lo que da como resultado un error de "nombre de usuario no encontrado", porque no lo hizo espere que Excel convierta un valor único a una fecha, 4000 registros en el archivo, mientras deja el resto del texto. Qué cojo código de lectura CSV; realmente, ¿no se supone que debe adivinar el tipo basado en los primeros registros X y quedarse con él? O déjalo todo texto. Si quiero formatearlo como "general", puedo elegirlo más tarde. Al asumir "general" desde el principio, corre el riesgo de corrupción de datos de texto.
Triynko
Tuve el problema al copiar y pegar. Para todas las búsquedas de la solución, seleccione la columna de destino, configúrela en un formato de cadena / texto, luego copie la fuente y haga una pasta especial (clic con el botón derecho) con 'solo valores'. Conserva los valores, sin formato de fecha.
Kai Noack
84
Solo quiero agregar que considero que este comportamiento de Excel es una falla grave. ¿Qué pasa con todas las personas que no tienen el lujo de cambiar el contenido del archivo csv antes de importar a Excel? ¿O qué pasa con las personas que no se dan cuenta de este problema hasta después de hacer muchos otros cambios en el archivo CSV? Hace que trabajar con archivos CSV en Excel sea un desastre.
robguinness
¿Estás usando DatatableJS? Porque ya sé cómo hacer esto con esa API. Si necesita esto, puede encontrarlo aquí: stackoverflow.com/a/36142043/4241058
Richard Rebeco
11
Todas estas soluciones para usar File -> Open -> Import funcionan bien para nosotros porque sabemos lo que estamos haciendo, pero es inútil para el otro 99.5% del mundo que no entiende navegar por el sistema de archivos desde / dentro / an solicitud. Ven un archivo, para usarlo hacen doble clic en él. He pasado 25 años enseñando a la gente cómo usar aplicaciones de oficina y escribiendo código que genera datos para dichas aplicaciones de oficina, y el uso de / application / para buscar el archivo a usar está completamente más allá de casi todos.
user2624417

Respuestas:

355

He descubierto que poner un '=' antes de las comillas dobles logrará lo que desea. Obliga a los datos a ser texto.

p.ej. = "2008-10-03", = "más texto"

EDITAR (según otras publicaciones) : debido al error de Excel 2007 observado por Jeffiekins, uno debería usar la solución propuesta por Andrew :"=""2008-10-03"""

Jarod Elliott
fuente
12
Estoy aceptando esta respuesta porque 1) mi archivo csv solo será utilizado por Excel, y 2) esto es para contabilidad y no puede tener un 'al principio, y 3) no quiero que tengan que hacerlo una importación Solo quiero que abran el csv.
55
¡Excelente! Pero debido al error de Excel 2007 utilizar la solución propuesta por Andrew : "=""2008-10-03""". Se actualizó la publicación.
TMS
1
Esto no funciona para mí en Excel 2010 si el texto es demasiado largo :(
steve
77
La razón por la que esto funciona es porque cuando Excel ve el carácter "=" decide evaluar la expresión que le sigue. En este caso, la expresión es simplemente un literal de cadena y el valor de un literal de cadena es el contenido de la cadena. Así, las comillas desaparecen mágicamente. Puede poner = 1 + 2 + 3 y obtener el valor 6 después de la importación CSV. La fórmula en sí no se destruye en el proceso de importación.
lokori
44
Hay un gran problema con este enfoque: si abre el archivo en Excel y edita y luego guarda y abre de nuevo, todo esto "desaparecerá"
ACV
150

Sé que esta es una vieja pregunta, pero el problema no desaparecerá pronto. Los archivos CSV son fáciles de generar desde la mayoría de los lenguajes de programación, más bien pequeños, legibles por humanos en un momento crucial con un editor de texto plano y ubicuos.

El problema no es solo con las fechas en los campos de texto, sino que cualquier cosa numérica también se convierte de texto a números. Un par de ejemplos donde esto es problemático:

  • ZIP / códigos postales
  • números telefónicos
  • números de identificación del gobierno

que a veces puede comenzar con uno o más ceros (0), que se desechan cuando se convierten en numéricos. O el valor contiene caracteres que pueden confundirse con operadores matemáticos (como en fechas: /, -).

Dos casos en los que puedo pensar que la solución "prepending =", como se mencionó anteriormente, podría no ser ideal es

  • donde el archivo puede importarse a un programa que no sea MS Excel (viene a la mente la función de Combinar correspondencia de MS Word),
  • donde la legibilidad humana puede ser importante.

Mi truco para evitar esto

Si uno pre / agrega un carácter no numérico y / o no fecha en el valor, el valor se reconocerá como texto y no se convertirá. Un carácter que no se imprima sería bueno ya que no alterará el valor mostrado. Sin embargo, el carácter de espacio antiguo simple (\ s, ASCII 32) no funciona para esto, ya que Excel lo corta y luego el valor aún se convierte. Pero hay varios otros caracteres de espacio de impresión y no impresión que funcionarán bien. Sin embargo, lo más fácil es agregar (agregar después) el carácter de tabulación simple (\ t, ASCII 9).

Beneficios de este enfoque:

  • Disponible desde el teclado o con un código ASCII fácil de recordar (9),
  • No molesta la importación,
  • Normalmente no molesta los resultados de la combinación de correspondencia (dependiendo del diseño de la plantilla, pero normalmente solo agrega un amplio espacio al final de una línea). (Sin embargo, si esto es un problema, observe otros caracteres, por ejemplo, el espacio de ancho cero (ZWSP, Unicode U + 200B)
  • no es un gran obstáculo al ver el CSV en el Bloc de notas (etc.),
  • y podría eliminarse mediante buscar / reemplazar en Excel (o Bloc de notas, etc.).
  • No necesita importar el CSV, pero simplemente puede hacer doble clic para abrir el CSV en Excel.

Si hay una razón por la que no desea usar la pestaña, busque en otra tabla Unicode algo más adecuado.

Otra opción

podría ser generar archivos XML, para los cuales un cierto formato también es aceptado para la importación por las nuevas versiones de MS Excel, y que permite muchas más opciones similares al formato .XLS, pero no tengo experiencia con esto.

Entonces hay varias opciones. Dependiendo de sus requisitos / aplicación, uno podría ser mejor que otro.


Adición

Es necesario decir que las versiones más nuevas (2013+) de MS Excel ya no abren el CSV en formato de hoja de cálculo: una aceleración más en el flujo de trabajo que hace que Excel sea menos útil ... Al menos, existen instrucciones para evitarlo. Consulte, por ejemplo, este Stackoverflow: ¿Cómo mostrar correctamente los archivos .csv en Excel 2013? .

fr13d
fuente
66
Obtuve los ceros iniciales correctos después de agregar \ta mi carácter de separación ;... maldita sea, MS Office, ¿por qué esto me tomó más de 2 minutos para darme cuenta?
Morten Jensen
2
Agregar \ t al final de todos los valores es realmente el truco. Es una solución alternativa, pero en la práctica funciona bien. Prefiero esto al truco de fórmula con el igual '=', porque el primero podría ser difícil de trabajar en otras herramientas.
ocroquette
3
No hay suficientes votos a favor que puedan expresar mi gratitud por ti. Buscar y reemplazar en el bloc de notas ++ ',' a '\ t, \ t' (para acomodar también la primera y la última columna) funciona de maravilla. Gracias.
Asaf
1
En mi consulta MySQL (para la salida CSV a través de PHP), utilicé CONCAT ('\ t', column_name). También hizo el truco. ¡Gracias!
Just Plain High
1
Gran idea. Por desgracia, Numbers es un poco "más inteligente" que Excel, y no cae en el truco de la pestaña. La mejor alternativa que se me ocurre es una guía ', ya que está bastante bien entendida y no distrae demasiado ... pero un invisible sería mejor.
Heath Raftery
101

Trabajando a partir de la solución de Jarod y el problema presentado por Jeffiekins, podría modificar

"May 16, 2011"

a

"=""May 16, 2011"""
Andrew Ferk
fuente
66
No funciona en Excel 2010 si el texto es más largo que una longitud determinada.
Steve
1
@ Andrew, esta "solución" causará problemas si necesita tener "valores en cualquier lugar entre la fecha.
Pacerier
8
Para su información, si guarda el archivo de Excel, el = desaparece y vuelve a la casilla la próxima vez que abra.
d512
Mi experiencia no coincide ni con Steve ni con d512. Funciona para mí en el .csv entrante en Excel 2013, y después de guardarlo como .xlsx no se revierte. Suficientemente fácil para que cualquiera pueda probar usando esta fila de datos: "806676", "Ninguno", "41", "=" "16 de mayo de 2011" "", "100.00", "Falso"
tbc0
1
@ tbc0 Intente en su "806676","None","41","=""05-16-2011""","100.00","False"lugar y verá que guardar y volver a cargar pierde el texto con guiones.
NetMage
65

Tuve un problema similar y esta es la solución que me ayudó sin tener que editar el contenido del archivo csv:

Si tiene la flexibilidad de asignarle un nombre al archivo distinto de ".csv", puede nombrarlo con una extensión ".txt", como "Myfile.txt" o "Myfile.csv.txt". Luego, cuando lo abra en Excel (no arrastrando y soltando, sino usando Archivo-> Abrir o la lista de archivos usados ​​más recientemente), Excel le proporcionará un "Asistente de importación de texto".

En la primera página del asistente, elija "Delimitado" para el tipo de archivo.

En la segunda página del asistente, elija "," como delimitador y también elija el calificador de texto si ha rodeado sus valores con comillas.

En la tercera página, seleccione cada columna individualmente y asigne a cada una el tipo "Texto" en lugar de "General" para evitar que Excel se meta con sus datos.

Espero que esto te ayude a ti oa alguien con un problema similar.

rainerbit
fuente
2
Ah, por cierto, no soy el primero en descubrir esto. risingline.com/use-excel-read-csv-without-reformatting.php Esa página web también tiene las instrucciones útiles que puede hacer clic en las columnas en la tercera página del asistente para seleccionarlas todas juntas antes de asignar cada tipo "Texto".
rainerbit
Esto puede funcionar para valores de fecha, pero no parece funcionar para cosas que Excel interpreta como numéricas. Si su cadena contiene todos los números y comas, el formato "Texto" será un formato de número científico.
Michael - ¿Dónde está Clay Shirky?
3
esto funcionó perfectamente para mí y no implicó ningún cambio en mi archivo, excepto cambiarle el nombre a .txt. gracias.
Kevin
1
Desafortunadamente, Excel solo le permite hacer esto para las primeras 6 columnas. Si necesita más, un mejor enfoque es copiar el contenido del csv, crear y vaciar el archivo de Excel, seleccionar todas las columnas / filas y establecer el tipo en Texto, luego pegar el contenido y usar Datos | Texto a columnas
nachocab
Esta es la mejor solución y debe marcarse como la respuesta.
Rob
28

ADVERTENCIA: Excel '07 (al menos) tiene un error (otro): si hay una coma en el contenido de un campo, no analiza el = "campo, contenido" correctamente, sino que coloca todo después de la coma en el siguiente campo, independientemente de las comillas.

La única solución que he encontrado que funciona es eliminar el = cuando el contenido del campo incluye una coma.

Esto puede significar que hay algunos campos que son imposibles de representar exactamente "correctamente" en Excel, pero ahora confío en que nadie esté demasiado sorprendido.

Jeffiekins
fuente
Acabo de probar esto en Excel 2007, y funciona correctamente para mí. Sin embargo, si hay un espacio inicial antes de las comillas, entonces no analiza la coma correctamente.
Sunny88
8
Esto no parece ser un error de acuerdo con RFC 4180. La forma correcta de citar el campo es citar todo el campo y luego citar las comillas internas. Entonces "=" "campo, contenido" "" tools.ietf.org/html/rfc4180
Peter Stephens
2
@PeterStephens, esto no funciona si field, contenttiene "dentro. Por ejemplo"=""field, co""ntent"""
Pacerier
1
@Pacerier Probablemente la cita incrustada debe ser doblemente citada, convirtiéndose en """".
ErikE
Puedo confirmar que la sugerencia de @ ErikE es correcta. Para un campo con valor 1"2, si elige usar este truco (en lugar de dejarlo como está "1""2"en el archivo, Excel ya lo habría tratado como texto), entonces la cadena correcta final en el archivo CSV de destino de Excel termina ser "=""1""""2""".
Tao
22

Al crear la cadena para escribirla en mi archivo CSV en C #, tuve que formatearla de esta manera:

"=\"" + myVariable + "\""
Pera Colin
fuente
2
esto me funcionó en Rails también. Gracias
Vieenay Siingh
3
También funciona en Java
Shoyo
Me funcionó en JavaScript usando Papa Parse.
wobsoriano
17

2018

La única solución adecuada que funcionó para mí (y también sin modificar el CSV ).

Excel 2010:

  1. Crear nuevo libro de trabajo
  2. Datos> Desde texto> Seleccione su archivo CSV
  3. En la ventana emergente, elija el botón de opción "Delimitado", luego haga clic en "Siguiente>"
  4. Casillas de verificación delimitadores: marque solo "Coma" y desmarque las otras opciones, luego haga clic en "Siguiente>"
  5. En la "Vista previa de datos", desplácese hacia el extremo derecho, luego mantenga presionada la tecla Mayús y haga clic en la última columna (esto seleccionará todas las columnas). Ahora en el "Formato de datos de columna" seleccione el botón de opción "Texto", luego haga clic en "Finalizar".

Excel office365: (versión del cliente)

  1. Crear nuevo libro de trabajo
  2. Datos> Desde texto / CSV> Seleccione su archivo CSV
  3. Detección de tipo de datos> no detectar

Nota: Excel office365 (versión web), mientras escribo esto, no podrá hacerlo.

evilReiko
fuente
3
Esto funciona sin cambiar los archivos CSV de antemano, por lo que creo que esta debería ser la respuesta correcta.
Jack
Esta parece la respuesta correcta. Tenía muchas esperanzas. Pero en MacOS (office365), no puedo seleccionar TODAS las columnas: no hay desplazamiento horizontal en la ventana de vista previa que se muestra en el asistente de importación de texto, de modo que solo puedo seleccionar las columnas visibles. Intenté atajos (CMD + A u otras cosas), sin resultado. La opción "no detectar" tampoco existe. Estoy devastado.
Normanius el
Excel office 365, seleccione Archivo, Opciones, Datos. Hay casillas de verificación para mostrar los asistentes de importación de datos heredados si es necesario.
Kurt Schultz el
15

En Excel 2010, abra una nueva hoja. En la cinta de datos, haga clic en "Obtener datos externos del texto". Seleccione su archivo CSV y luego haga clic en "Abrir". Haga clic en Siguiente". Desmarque "Tab", coloque una marca de verificación junto a "Coma", luego haga clic en "Siguiente". Haga clic en cualquier lugar de la primera columna. Mientras mantiene presionada la tecla Mayús, arrastre el control deslizante hasta que pueda hacer clic en la última columna, luego suelte la tecla Mayús. Haga clic en el botón de opción "texto" y luego haga clic en "Finalizar"

Todas las columnas se importarán como texto, tal como estaban en el archivo CSV.

Rob Stockley
fuente
1
Me encontré con el mismo problema, ¡pero seguir cuidadosamente las instrucciones de @ Rob funcionaría perfectamente! Gracias
Milacay
2
Lamentablemente, el asistente de datos de texto no admite celdas de varias líneas. Si se encuentra dicho texto de varias líneas, escribirá todas las líneas después de la primera en nuevas filas, dividiendo toda la importación. Solo interpreta los saltos de línea correctamente si abre el archivo CSV haciendo doble clic. Maldita sea Microsoft ...
CodeManX
1
Desafortunadamente, esto no resuelve el problema de la "ayuda" de formato aleatorio de Excel: el texto DEC1 todavía se cambia a la fecha Dic-01. Lo mismo con el texto de AAAA-MM-DD que se cambia a DD / MM / AAAA. :(
Baracus
12

Sigue siendo un problema en el lanzamiento de Microsoft Office 2016, bastante inquietante para quienes trabajamos con nombres genéticos como MARC1, MARCH1, SEPT1, etc. La solución que he encontrado es la más práctica después de generar un archivo ".csv" en R, que luego se abrirá / compartirá con los usuarios de Excel:

  1. Abra el archivo CSV como texto (bloc de notas)
  2. Cópielo (ctrl + a, ctrl + c).
  3. Péguelo en una nueva hoja de Excel: todo se pegará en una columna como cadenas de texto largas.
  4. Elija / seleccione esta columna.
  5. Vaya a Datos- "Texto a columnas ...", en la ventana abierta, elija "delimitado" (siguiente). Verifique que la "coma" esté marcada (marcarla ya mostrará la separación de los datos en las columnas a continuación) (siguiente), en esta ventana puede elegir la columna que desea y marcarla como texto (en lugar de general) (Finalizar).

HTH

Ana Maria Mendes-Pereira
fuente
El esfuerzo manual también fue poco atractivo para mí. Sin embargo, después de agotar todas las posibilidades disponibles, esta fue la más robusta y confiable.
Ana Maria Mendes-Pereira
Procesamiento por lotes, no obstante.
Ana Maria Mendes-Pereira
Esta es realmente la mejor respuesta aquí que requiere la menor cantidad de trabajo. Ojalá pudieras configurar alguna opción para forzarlo a no analizar el archivo.
llega el
También puede reemplazar todas las comas con pestañas, entonces será DSuprima de auto
rollos
10

Aquí está el método simple que usamos en el trabajo aquí al generar el archivo csv en primer lugar, cambia un poco los valores, por lo que no es adecuado en todas las aplicaciones:

Anteponer un espacio a todos los valores en el csv

Este espacio se eliminará mediante Excel de números como "1", "2.3" y "-2.9e4", pero permanecerá en fechas como "01/10/1993" y booleanos como "VERDADERO", evitando que se conviertan en Tipos de datos internos de Excel.

También evita que las comillas dobles se eliminen al leer, por lo que una forma infalible de hacer que el texto en un csv permanezca sin cambios por Excel AÚN SI hay algún texto como "3.1415" es rodearlo con comillas dobles Y anteponer toda la cadena con un espacio, es decir (usando comillas simples para mostrar lo que escribiría) '"3.1415"'. Luego, en Excel siempre tiene la cadena original, excepto que está rodeada por comillas dobles y precedida por un espacio, por lo que debe tener en cuenta esas en cualquier fórmula, etc.

Dan
fuente
Esto funcionó para mí. Tenía algunos valores como 1-1-1 que se convierten automáticamente a fechas. Como se mencionó, el espacio se transferirá para que el valor cambie, pero hago una tira al analizarlo, así que para mí eso no es un gran problema.
jacklin
El espacio ya no funciona para evitar la interpretación de fechas o la eliminación de ceros a la izquierda. Pero puede usar un espacio que no se rompa en su "\xA0"lugar, eso funcionará.
Doin
8

(Suponiendo Excel 2003 ...)

Cuando se utiliza el Asistente de texto a columnas, en el Paso 3 puede dictar el tipo de datos para cada una de las columnas. Haga clic en la columna en la vista previa y cambie la columna de mal comportamiento de "General" a "Texto".

DocMax
fuente
8
Esta es una excelente opción si pudiera forzar al usuario a usar el proceso de importación.
En realidad, esto no ayuda al problema, ya que los números en la columna TEXTO se convertirán a NÚMEROS al exportar a .csv de todos modos ...
Chonez
8

Esta es la única forma en que sé cómo lograr esto sin alterar el archivo. Como es habitual con Excel, aprendí esto golpeándome la cabeza contra el escritorio durante horas.

Cambie la extensión de archivo .csv a .txt; esto evitará que Excel convierta automáticamente el archivo cuando se abra. Así es como lo hago: abra Excel en una hoja de trabajo en blanco, cierre la hoja en blanco, luego Archivo => Abrir y elija su archivo con la extensión .txt. Esto obliga a Excel a abrir el "Asistente de importación de texto", donde le hará preguntas sobre cómo desea que interprete el archivo. Primero elige su delimitador (coma, tabulación, etc.), luego (aquí está la parte importante) elige un conjunto de columnas de columnas y selecciona el formato. Si desea exactamente lo que hay en el archivo, elija "Texto" y Excel mostrará exactamente lo que hay entre los delimitadores.

Chris
fuente
Esto funcionó bien para mí el 03-03-2015 trabajando con Excel para Mac 2011 (versión 14.4.8 150116), trabajando con los datos en la pregunta SO awk: evite volver a formatear valores similares a fechas , donde el problema es con Excel que awk, a pesar del título de la pregunta.
Jonathan Leffler
4

(EXCEL 2007 y posterior)

Cómo forzar a Excel a que no "detecte" formatos de fecha sin editar el archivo fuente

Ya sea:

  • cambie el nombre del archivo como .txt
  • Si no puede hacerlo, en lugar de abrir el archivo CSV directamente en Excel, cree un nuevo libro de trabajo y luego vaya
    Data > Get external data > From Text
    y seleccione su CSV.

De cualquier manera, se le presentarán opciones de importación, simplemente seleccione cada columna que contenga fechas y dígale a Excel que formatee como "texto", no "general".

Algún chico
fuente
4

Lo que hice para este mismo problema fue agregar lo siguiente antes de cada valor csv: "=" "" y una comilla doble después de cada valor CSV, antes de abrir el archivo en Excel. Tome los siguientes valores, por ejemplo:

012345,00198475

Deben modificarse antes de abrir en Excel para:

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

Después de hacer esto, cada valor de celda aparece como una fórmula en Excel y, por lo tanto, no se formateará como un número, fecha, etc. Por ejemplo, un valor de 012345 aparece como:

="012345"
ChrisB
fuente
Otro enfoque es almacenar el número en el csv como 1234500198475E-8; De esta manera, aún serán posibles más cálculos en Excel.
bert bruynooghe
4

Ninguna de las soluciones ofrecidas aquí es una buena solución. Puede funcionar para casos individuales, pero solo si tiene el control de la pantalla final. Tome mi ejemplo: mi trabajo produce una lista de productos que venden al por menor. Esto está en formato CSV y contiene códigos de pieza, algunos de ellos comienzan con ceros, establecidos por los fabricantes (no bajo nuestro control). Elimine los ceros a la izquierda y de hecho puede igualar otro producto. Los clientes minoristas quieren la lista en formato CSV debido a los programas de procesamiento de fondo, que también están fuera de nuestro control y son diferentes por cliente, por lo que no podemos cambiar el formato de los archivos CSV. Sin prefijo '=', ni pestañas agregadas. Los datos en los archivos CSV sin procesar son correctos; Cuando los clientes abren esos archivos en Excel, comienzan los problemas. Y muchos clientes no son realmente expertos en informática. Pueden abrir y guardar un archivo adjunto de correo electrónico. Estamos pensando en proporcionar los datos en dos formatos ligeramente diferentes: uno como Excel Friendly (utilizando las opciones sugeridas anteriormente agregando una TAB, el otro como el "maestro". Pero esto puede ser una ilusión ya que algunos clientes no entenderán por qué tenemos que hacer esto. Mientras tanto, seguimos explicando por qué a veces ven datos "incorrectos" en sus hojas de cálculo. Hasta que Microsoft realice un cambio adecuado, no veo una resolución adecuada para esto, siempre y cuando uno no tenga control sobre cómo los usuarios finales usa los archivos. Pero esto puede ser una ilusión ya que algunos clientes no entenderán por qué necesitamos hacer esto. Mientras tanto, seguimos explicando por qué a veces ven datos "incorrectos" en sus hojas de cálculo. Hasta que Microsoft realice un cambio adecuado, no veo una resolución adecuada para esto, siempre y cuando uno no tenga control sobre cómo los usuarios finales usan los archivos. Pero esto puede ser una ilusión ya que algunos clientes no entenderán por qué necesitamos hacer esto. Mientras tanto, seguimos explicando por qué a veces ven datos "incorrectos" en sus hojas de cálculo. Hasta que Microsoft realice un cambio adecuado, no veo una resolución adecuada para esto, siempre y cuando uno no tenga control sobre cómo los usuarios finales usan los archivos.

mljm
fuente
Si un espacio extra a la izquierda de sus datos no importa, entonces puede solucionar los problemas de Excel anteponiendo "\xA0"(sin espacios) a sus datos.
Doin
3

Esta semana me encontré con esta convención, que parece ser un enfoque excelente, pero no puedo encontrarla referenciada en ningún lado. ¿Alguien está familiarizado con eso? ¿Puedes citar una fuente para ello? No he buscado horas y horas, pero espero que alguien reconozca este enfoque.

Ejemplo 1: = ("012345678905") se muestra como 012345678905

Ejemplo 2: = ("1954-12-12") se muestra como 1954-12-12 , no 12/12/1954 .

GW4
fuente
2

No es el Excel. Windows reconoce la fórmula, los datos como una fecha y autocorrecciones. Tienes que cambiar la configuración de Windows.

"Panel de control" (-> "Cambiar a vista clásica") -> "Opciones regionales y de idioma" -> pestaña "Opciones regionales" -> "Personalizar ..." -> pestaña "Números" -> Y luego cambie los símbolos segun lo que quieras

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

Funcionará en su computadora, si esta configuración no se cambia, por ejemplo, en la computadora de sus clientes, verán las fechas en lugar de los datos.

syandras
fuente
2

Hola tengo el mismo problema

Escribo este vbscipt para crear otro archivo CSV. El nuevo archivo CSV tendrá un espacio en la fuente de cada campo, por lo que Excel lo entenderá como texto.

Por lo tanto, cree un archivo .vbs con el código a continuación (por ejemplo Modify_CSV.vbs), guárdelo y ciérrelo. Arrastre y suelte su archivo original en su archivo vbscript. Creará un nuevo archivo con "SPACE_ADDED" al nombre del archivo en la misma ubicación.

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
Harry Duong
fuente
2

Sin modificar su archivo csv puede:

  1. Cambie la opción de celdas de formato de Excel a "texto"
  2. Luego, use el "Asistente de importación de texto" para definir las celdas csv.
  3. Una vez importado, elimine esos datos
  4. luego solo pegue como texto sin formato

Excel formateará y separará adecuadamente sus celdas csv como texto formateado ignorando los formatos de fecha automática.

Es una especie de trabajo tonto, pero supera la modificación de los datos csv antes de importar. Andy Baird y Richard se eludieron a este método, pero fallaron un par de pasos importantes.

acantilado
fuente
1

Sé que es un viejo tema. Para aquellos como yo, que todavía tienen este problema al usar Office 2013 a través del objeto powershell com, pueden usar el método opentext . El problema es que este método tiene muchos argumentos, que a veces son mutuamente excluyentes. Para resolver este problema, puede usar el método de parámetro invoke-named introducido en esta publicación . Un ejemplo sería

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

Desafortunadamente, acabo de descubrir que este método de alguna manera rompe el análisis csv cuando las celdas contienen saltos de línea. Esto es compatible con csv, pero la implementación de microsofts parece tener errores. Además, de alguna manera no detectó caracteres específicos alemanes. Darle la cultura correcta no cambió este comportamiento. Todos los archivos (csv y script) se guardan con codificación utf8. Primero escribí el siguiente código para insertar la celda csv por celda.

$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++;}

Pero esto es extremadamente lento, por eso busqué una alternativa. Aparentemente, Excel le permite establecer los valores de un rango de celdas con una matriz. Así que usé el algoritmo en este blog para transformar el csv en una matriz múltiple.

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" ";"

Puede usar el código anterior, ya que debería convertir cualquier csvs en Excel. Simplemente cambie la ruta al csv y al carácter delimitador en la parte inferior.

latido
fuente
demasiado complicado
aparece el
1

En mi caso, "Sept8" en un archivo csv generado usando R se convirtió en "8-Sept" en Excel 2013. El problema se resolvió usando la función write.xlsx2 () en el paquete xlsx para generar el archivo de salida en formato xlsx , que Excel puede cargar sin una conversión no deseada. Entonces, si recibe un archivo csv, puede intentar cargarlo en R y convertirlo en xlsx utilizando la función write.xlsx2 ().

Dinghai Zheng
fuente
No sé por qué tu respuesta es rechazada. Es útil al menos para las personas que usan R. Esta respuesta me ayudó. Gracias :)
sriharsha KB
1

Una solución alternativa usando Google Drive (o Numbers si estás en una Mac):

  1. Abre los datos en Excel
  2. Establezca el formato de la columna con datos incorrectos en Texto (Formato> Celdas> Número> Texto)
  3. Cargue el .csv en Google Drive y ábralo con Hojas de cálculo de Google
  4. Copie la columna ofensiva
  5. Pegar columna en Excel como texto (Edición> Pegado especial> Texto)

Alternativamente, si está en una Mac para el paso 3, puede abrir los datos en Numbers.

Derek Hill
fuente
Esta es una solución sensata en lugar de trabajar en ella durante horas sin ninguna resolución.
imsrgadich
1

(EXCEL 2016 y posterior, en realidad no lo he probado en versiones anteriores)

  1. Abrir nueva página en blanco
  2. Ir a la pestaña "Datos"
  3. Haga clic en "Desde texto / CSV" y elija su archivo csv
  4. Compruebe en la vista previa si sus datos son correctos.
  5. En caso de que una columna se convierta a fecha, haga clic en "editar" y luego seleccione el tipo Texto haciendo clic en el calendario en la cabecera de la columna
  6. Haga clic en "Cerrar y cargar"
Roman Yakoviv
fuente
0

De acuerdo, encontré una manera simple de hacerlo en Excel 2003 hasta 2007. Abra un libro xls en blanco. Luego vaya al menú Datos, importe datos externos. Seleccione su archivo csv. Diríjase al asistente y luego, en "formato de datos de columna", seleccione cualquier columna que deba ser forzada a "texto". Esto importará toda esa columna como un formato de texto, evitando que Excel intente tratar cualquier celda específica como una fecha.

Ricardo
fuente
0

Este problema todavía está presente en Mac Office 2011 y Office 2013, no puedo evitar que suceda. Parece una cosa tan básica.

En mi caso, tenía valores como "1 - 2" y "7 - 12" dentro del CSV encerrado correctamente entre comillas, esto se convierte automáticamente en una fecha dentro de Excel, si intenta convertirlo posteriormente en texto sin formato, obtendrá una representación numérica de la fecha, como 43768. Además, formatea nuevamente los números grandes que se encuentran en códigos de barras y números EAN a 123E + nuevamente que no se pueden volver a convertir.

Descubrí que las Hojas de cálculo de Google Drive de Google Drive no convierten los números en fechas. Los códigos de barras tienen comas en ellos cada 3 caracteres, pero estos se eliminan fácilmente. Maneja CSV realmente bien, especialmente cuando se trata de CSV MAC / Windows.

Podría salvar a alguien alguna vez.

EricNo7
fuente
0

SOLUCIÓN MÁS FÁCIL Acabo de resolver esto hoy.

  • Abierto en Word
  • Reemplace todos los guiones con guiones en
  • Guardar y cerrar
  • Abrir en Excel

Una vez que haya terminado de editar, siempre puede volver a abrirlo en Word para reemplazar los guiones por guiones nuevamente.

Randy Hoffman
fuente
0

Hago esto para los números de tarjetas de crédito que siguen convirtiéndose en notación científica: termino importando mi .csv en Google Sheets. Las opciones de importación ahora permiten desactivar el formateo automático de valores numéricos. Establezco cualquier columna sensible a Texto sin formato y la descargo como xlsx.

Es un flujo de trabajo terrible, pero al menos mis valores se dejan como deberían.

Brendonwbrown
fuente
Si te molestas en leer algunas de las otras respuestas, verás que alguien ya sugirió esto aquí .
Laurel
Me molesté, gracias. Sugiero que la selección de formato automático sea una parte nueva del proceso de importación. Mi respuesta proporciona un flujo de trabajo muy específico para aquellos que, como yo, se han visto obligados a usar Hojas de cálculo para tratar este problema específico. En mi opinión, esto merecía una respuesta por separado. Un ajuste menor de su tono podría hacer que su comentario sea interpretado como útil, lo cual es el punto central de esta familia de sitios web.
Brendonwbrown
Pero solo puede usar la importación de texto en Excel para importar el archivo CSV y no molestarse con las hojas, como se señala en otras respuestas.
NetMage
0

Hice esta macro vba que básicamente formatea el rango de salida como texto antes de pegar los números. Funciona perfecto para mí cuando quiero pegar valores como 8/11, 23/6, 1/3, etc. sin que Excel los interprete como fechas.

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

Estoy muy interesado en saber si esto también funciona para otras personas. He estado buscando una solución a este problema durante un tiempo, pero no he visto una solución rápida de vba antes que no incluyera la inserción 'delante del texto de entrada. Este código retiene los datos en su forma original.

LarsS
fuente
-1

Si coloca una coma invertida al comienzo del campo, se interpretará como texto.

Ejemplo: se 25/12/2008convierte'25/12/2008

También puede seleccionar el tipo de campo al importar.

Harley Holcombe
fuente
99
No quiero un 'al comienzo de mis datos.
27
-1. El 'solo funciona cuando se ingresa directamente en Excel, pero no funciona en CSV: tendría un carácter adicional' en la celda de Excel después de la importación.
TMS
-1

Un método alternativo:

Convierta el formato de la columna que desea cambiar a 'Texto'. Seleccione todas las celdas que desea conservar, copie. Sin anular la selección de esas columnas, haga clic en "Editar> Pegado especial> Como valores"

Guardar como CSV. Tenga en cuenta que esto tiene que ser lo último que haga al archivo porque cuando lo vuelva a abrir, se formateará como fechas, ya que los formatos de celda no se pueden guardar en archivos CSV.

Andy Baird
fuente