2008-11-21 145 views
23

Quiero generar un archivo CSV para que el usuario use Excel para abrirlo.CSV para Excel, incluidos los ceros iniciales y las comas

Si deseo escapar de la coma en valores, puedo escribirlo como "640,480".

Si quiero mantener los ceros a la izquierda, puedo usar = "0".

Pero si quiero mantener tanto la coma como los ceros a la izquierda en el valor, escribir como = "001,002" se dividirá en dos columnas. Parece que no hay solución para expresar los datos correctos.

¿Hay alguna manera de expresar 001, 002 en CSV for Excel?

Respuesta

4

Haz

"""001,002""" 

descubrí esto escribiendo "001002" y luego haciendo Guardar Como CSV en Excel. Si esto no es exactamente lo que quiere (no desea cotizaciones), esta podría ser una buena forma de encontrar lo que desea.

Otra opción podría ser usar texto delimitado por tabuladores, si esta es una opción para usted.

5

Ponga una cadena de prefijo en los datos:

"N001,002","N002,003" 

(Mientras que el prefijo no es un E)

que la notación (En OpenOffice al menos) por encima analiza como un total de 2 columnas con los N001,002 bytes correctamente almacenados.

CSV La especificación dice que, está permitido dentro de cadenas de comillas.

Además, una advertencia por experiencia: asegúrese de hacer esto también con los números de teléfono. Excel interpretará los números de teléfono como un número flotante y los guardará en notación científica:/y 1.800E10 no es un número de teléfono realmente bueno.

En OpenOffice, este trozo RawCSV también decodifica como se esperaba:

"=""001,002""","=""002,004""" 

es decir:

$rawdata = '001,002'; 
    $equation = "=\"$rawdata\""; 
    $escaped = str_replace('"','""',$equation); 
    $csv_chunk = "\"$escaped\"" ; 
0

Mirando más en la hoja de cálculo de Excel se ve lo que quiere no se puede hacer usando CSV.

Este sitio http://office.microsoft.com/en-us/excel/HP052002731033.aspx dice "Si las celdas muestran fórmulas en lugar de valores de fórmula, las fórmulas se convierten como texto. Se perderán todos los formatos, gráficos, objetos y otros contenidos de la hoja de cálculo. "

Sin embargo, puede cambiar la forma de cargarlo para obtener el resultado que desea. Consulte esta página web: Microsoft import a text file.

La clave es elegir Importar datos externos-Importar archivos de texto-datos, vaya a Siguiente, Siguiente, y luego marque "Texto" en formato de datos de columna. Esto evitará que se interprete como un número y perderá el formato.

1

Un lector de mi blog encontró una solución, = "001" & CHAR (44) & "002", parece factible en mi máquina! respuesta

31

Kent Fredric contiene la solución: (. Yo estoy molestando a publicar esto como una respuesta por separado, ya que no está claro a partir de la respuesta de Kent que es una solución válida de Excel)

 "=""001,002"""

+0

Brillante. Trabajé exactamente como lo necesitaba. – Sasha

+1

Una nota al margen: esto parece funcionar para cualquier cosa EXCEPTO los valores que tienen más de 253 caracteres o más (después de 255 caracteres, Excel deja de buscar las cotizaciones de cierre y se confunde ...?) – Tao

+0

curiosamente, mientras esto funciona: 000 , "=" "001,002" "" Esto no significa: 000, "=" "001,002" "" – eyaler

0

Estuve jugando con CSV a Excel (utilizo PHP para crear el archivo CSV, pero creo que esta solución funciona para cualquier idioma. Cuando ve que los caracteres principales (como +, - o 0 están desapareciendo), cree el archivo CSV con chr(13) como un prefijo. Este es un carácter no imprimible y funciona de maravilla para mi versión de Excel Office 2010. Probé otro no imprimible los personajes, pero sin suerte.

lo tanto, utilizar la solución de Internet Chirp pero pellizcada con mi prefijo:

if (preg_match("/^0/", $str) || preg_match("/^\+?\d{8,}$/", $str) || preg_match("/^\d{4}.\d{1,2}.\d{1,2}/", $str)) { 
    $str = chr(13)."$str"; 
} 
0

Si está utilizando "Content-Disposition" y la exportación de Asp a sobresalir usando etiquetas HTML, entonces usted tiene que añadir "style = 'mso-number-format: \ @;' "a esa etiqueta y hacer que acepte solo valores de texto, con lo que se evitará la omisión de ceros; si se acepta la barra diagonal" \ ", utilice la barra diagonal doble" \ "

0

Todas las respuestas sugeridas no parecen funcionar para mí en este momento ("=" "blahblah" "" y otras) en todas las versiones actuales de Excel o en la aplicación de números en OS X.

La única solución que descubrí que está trabajando por ahí es agregar un carácter nulo con escape al principio de la cadena (que es \ 0 en lenguajes basados ​​en PHP o C). Todo termina tratado como está sin que el software lo calcule o lo procese al abrir la hoja de cálculo.

echo "\0" . $data; 
1

Bastante viejo hilo, pero ¿por qué no acaba de agregar espacios en blanco después de su valor. Luego se tratará como una cadena y no se eliminarán los ceros iniciales.

"001002".""

+0

Así que, sí - cambió mi consulta sql a: en la columna de textoThatLooksLikeANumber + '' – skrile

0

Excel utiliza un formato predeterminado para columnas CSV en función del contenido. Entonces, si tiene 001 en una csv, Excel la convertirá automáticamente a 1.

La única manera de mantener los ceros a la izquierda en excel de un archivo csv es cambiando la extensión del archivo csv a .txt, luego solo abra Excel, haga clic en abrir, seleccione el archivo de texto, y verá el Asistente de importación de texto. Seleccione su formato csv (separado por comas), luego solo asegúrese de seleccionar "Texto" como formato.

Y eso es todo, ahora puede exportar los datos anteriores de csv a cualquier otro manteniendo los ceros a la izquierda.

1

Como nadie lo mencionó anteriormente, pensé que valía la pena mencionarlo en esta publicación anterior.

Si agrega un carácter de tabulación horizontal \t antes del número, entonces MS Excel también mostrará los ceros a la izquierda. Y el carácter de tabulación no se muestra en la hoja de Excel. Incluso si está rodeado de comillas dobles. (Por ejemplo, \"\t001,002\")

También se ve mejor en Notepad ++, en comparación con poner un \0 aka NULL antes de ese número.

Cuestiones relacionadas