Importación CSV de Excel que trata las cadenas de números entre comillas como valores numéricos, no cadenas

13

Tengo una aplicación web que está exportando sus datos a un archivo CSV. Aquí hay una fila de ejemplo del archivo CSV en cuestión:

28,"65154",02/21/2013 00:00,"false","0316295","8316012,8315844","MALE"

Como no puedo publicar una imagen, tendré que explicar los resultados en Excel. El campo "0316295" se convierte en un número y el 0 inicial desaparece. El "8316012,8315844" se interpreta como un solo número: 83,160,128,315,844. Eso, obviamente, no es el resultado deseado.

He visto a personas recomendar una cita única líder para tales casos, pero eso tampoco funciona.

28,"65154",02/21/2013 00:00,"false","'0316295","'8316012,8315844","MALE"

La comilla simple es visible en todo momento en la celda en Excel, aunque si yo mismo ingreso un número con una comilla simple inicial, muestra solo la cadena deseada y no la comilla simple con la cadena.

Parece que importar no es lo mismo que escribir.

¿Alguien tiene una solución aquí?

Michael Oryl
fuente
¿Puedes importarlo usando LibreOffice o algo por el estilo? Acabo de importar y obtuve: 28 65154 21/02/2013 00:00 falso 0316295 8316012,8315844 MASCULINO (si puedes leer eso ...?)
FreudianSlip
Esta pregunta es similar y ofrece algunas buenas soluciones: superuser.com/questions/234997/…
Brad Patton
@FreudianSlip No, no podemos usar alguna solución de terceros. Los usuarios hacen clic en el botón "descargar CSV" y el archivo se abre en Excel. Ese es el entorno con el que estamos lidiando. Realmente no puedo complicarlo.
Michael Oryl
@Brad Leí esa publicación antes buscando soluciones. Ahí es donde obtuve la opción de comillas simples, que realmente no me gusta ya que Excel muestra la cita en la celda en sí cuando se importa desde CSV (incluso si no la muestra si escribe lo mismo en usted mismo).
Michael Oryl
Entonces, ¿controlas la aplicación web al menos? ¿Cómo va a implementar la solución de forma transparente de los usuarios? He actualizado mi respuesta para que maneje correctamente los valores con comas
Alex P.

Respuestas:

10

Esto debería funcionar

28,"65154",02/21/2013 00:00,"false",="0316295","=""8316012,8315844""","MALE"
Alex P.
fuente
No, eso destruye el valor con dos números. Obtenemos = "1234567 sin presupuesto de cierre. Sin embargo, funciona para los números más simples.
Michael Oryl
1
si controla la aplicación web, podría implementar la exportación al formato SYLK en.wikipedia.org/wiki/SYmbolic_LinK_(SYLK) . tiene un control mucho mejor de la representación de datos. si no, podría hacer fácilmente un script de conversión
Alex P.
2
actualizó la respuesta para que maneje correctamente los valores con comas
Alex P.
Eso manejó los valores separados por comas correctamente. Gracias.
Michael Oryl
Gracias. Esta solución resolvió un problema con la importación de números hexadecimales también. Excel reemplaza 00E3con 0 (0 * 10 ^ 3) y lo muestra como notación sci (0.00E + 00). Realmente hace lo mismo "00e3"sin el =. Pero ="00e3"funciona perfectamente. (abriendo un CSV con Excel 2010)
mpag
12

Para mantener los ceros a la izquierda, puede establecer el formato de esa columna específica en Texto en el Asistente de importación de texto.

  1. Inicie el Asistente de importación de texto yendo a la pestaña Datos y haciendo clic en Desde texto .
  2. Seleccione el archivo CSV que desea importar.
  3. Elija Delimitado y presione Siguiente .
  4. Desmarque la pestaña (predeterminado). Elige coma . Asegúrese de que Text Qualifier esté configurado en ". Presiona Siguiente .
  5. Aquí es donde puede especificar los formatos . Haga clic en el encabezado de la columna cuyos ceros iniciales desea conservar. Seleccionar texto . (Ver imagen a continuación)

    ingrese la descripción de la imagen aquí

  6. Presione Finalizar y luego seleccione una ubicación adecuada para sus datos. Resultado de muestra:

    ingrese la descripción de la imagen aquí

Editar : hay otra forma ; haga que la aplicación web exporte a un archivo .TXT delimitado por comas en lugar de .CSV (o simplemente cambie la extensión del archivo exportado después de guardarlo). Esto obliga a Excel a pasar por el asistente de importación cuando abren el archivo. Como ventaja adicional, reduce las posibilidades de que los usuarios modifiquen o alteren sus datos sin procesar originales.

Ellesa
fuente
1
Sí, eso es cierto. Simplemente no es realmente conveniente para el usuario final cuando, en comparación, todo lo que tienen que hacer es hacer clic en el enlace del generador CSV en nuestra aplicación web y Excel lo carga automáticamente, aunque con los problemas mencionados anteriormente. Los archivos CSV están configurados para abrirse en Excel, y Excel no ofrece ninguna opción en ese momento. Simplemente los carga. Sin embargo, aprecio que lo hayas señalado.
Michael Oryl
1
Hay otra forma, pero no sé si es posible en su caso: haga que la aplicación web exporte a delimitado por comas en .TXTlugar de .CSV(o simplemente cambie la extensión del archivo exportado). Este tipo de "obliga" a los usuarios a pasar por el asistente de importación cuando abren el archivo.
Ellesa
Ese es un muy buen punto. Gracias por señalar eso. Puede ser útil en el futuro.
Michael Oryl
4

Excel trata los valores numéricos que comienzan con un carácter de tabulación como texto.

<tabchar>000000100000200000,ABC,DEF

Aparecerá como:

000000100000200000|ABC|DEF

El | es el límite de la celda (con fines ilustrativos). Entonces, por ejemplo, si su sistema genera el archivo CSV usando el juego de caracteres utf-8, puede agregar el &#x0009;(Tab Char en Hex) antes de su valor numérico para forzar a Excel a interpretarlo como texto.

Madeyedexter
fuente
Elimine el espacio antes del punto y coma en la representación hexadecimal. No sé cómo escapar del carácter Hex Tab en la respuesta, por lo que deliberadamente lo he escrito mal.
Madeyedexter
1
Yo hice el escape. Y aprendí algo nuevo, gracias. Tengo que agregar esto a mi tema favorito para el trabajo :)
nixda
3

Excel detectará automáticamente el formato de un campo CSV a menos que la columna CSV tenga este formato:

"=""Data Here"""

Esto también funciona para las hojas de Google

Chris Halcrow
fuente
0

Tendría que usar la funcionalidad "Datos -> Obtener datos externos -> Importar texto del archivo" en Excel para que se muestre como texto. Este es el asistente de importación de texto @Kaze mencionado.

La única forma de forzar a Excel a mostrar números como texto desde la entrada, sin que el usuario tenga que hacer nada, es generar un archivo de Excel y especificar un "formato de número personalizado". Recomiendo usar una biblioteca de exportación XLS para esto, ya que no parece tan simple como agregar una línea de texto de configuración en un archivo CSV.

Magne
fuente
0

pruebe la función de limpieza para valores que están en mal estado. Por ejemplo = clean ("12345678901234567890"). Me funciona para números, fechas, horas, etc. Advierto que, dado que este no es el propósito de esta función, podría dejar de funcionar con nuevas versiones, etc.

Mark Prather
fuente