¿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.
Respuestas:
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"""
fuente
"=""2008-10-03"""
. Se actualizó la publicación.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:
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
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:
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? .
fuente
\t
a mi carácter de separación;
... maldita sea, MS Office, ¿por qué esto me tomó más de 2 minutos para darme cuenta?column_name
). También hizo el truco. ¡Gracias!'
, ya que está bastante bien entendida y no distrae demasiado ... pero un invisible sería mejor.Trabajando a partir de la solución de Jarod y el problema presentado por Jeffiekins, podría modificar
a
fuente
"
valores en cualquier lugar entre la fecha."806676","None","41","=""05-16-2011""","100.00","False"
lugar y verá que guardar y volver a cargar pierde el texto con guiones.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.
fuente
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.
fuente
field, content
tiene"
dentro. Por ejemplo"=""field, co""ntent"""
""""
.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"""
.Al crear la cadena para escribirla en mi archivo CSV en C #, tuve que formatearla de esta manera:
fuente
2018
La única solución adecuada que funcionó para mí (y también sin modificar el CSV ).
Excel 2010:
Excel office365: (versión del cliente)
Nota: Excel office365 (versión web), mientras escribo esto, no podrá hacerlo.
fuente
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.
fuente
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:
HTH
fuente
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.
fuente
"\xA0"
lugar, eso funcionará.(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".
fuente
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.
fuente
awk
: evite volver a formatear valores similares a fechas , donde el problema es con Excel queawk
, a pesar del título de la pregunta.(EXCEL 2007 y posterior)
Cómo forzar a Excel a que no "detecte" formatos de fecha sin editar el archivo fuente
Ya sea:
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".
fuente
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:
Deben modificarse antes de abrir en Excel para:
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:
fuente
1234500198475E-8
; De esta manera, aún serán posibles más cálculos en Excel.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.
fuente
"\xA0"
(sin espacios) a sus datos.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 .
fuente
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.
fuente
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.
fuente
Sin modificar su archivo csv puede:
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.
fuente
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
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.
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.
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.
fuente
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 ().
fuente
Una solución alternativa usando Google Drive (o Numbers si estás en una Mac):
Alternativamente, si está en una Mac para el paso 3, puede abrir los datos en Numbers.
fuente
(EXCEL 2016 y posterior, en realidad no lo he probado en versiones anteriores)
fuente
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.
fuente
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.
fuente
SOLUCIÓN MÁS FÁCIL Acabo de resolver esto hoy.
Una vez que haya terminado de editar, siempre puede volver a abrirlo en Word para reemplazar los guiones por guiones nuevamente.
fuente
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.
fuente
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.
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.
fuente
Si coloca una coma invertida al comienzo del campo, se interpretará como texto.
Ejemplo: se
25/12/2008
convierte'25/12/2008
También puede seleccionar el tipo de campo al importar.
fuente
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.
fuente