¿Cómo evito que Numbers manipule números al importar un CSV?

12

Cuando abro un archivo CSV en Numbers, convierte "útilmente" los campos que reconoce como numéricos eliminando los ceros a la izquierda, convirtiendo cosas que reconoce como fechas, etc.

Tomemos, por ejemplo, que escribe un código UPC en una hoja de cálculo de Numbers 005566778899 , Numbers lo convertirá automáticamente en 5566778899 . Esto no es lo que me gustaría ...

Sin embargo, por la forma en que uso Numbers, abro bases de datos con miles de códigos UPC con ceros anteriores. Algunos de ellos también contienen fechas que Numbers también formateará. Básicamente no quiero ninguna de estas características, quiero que mi contenido se quede solo.

¿Cómo puedo hacer que Numbers deje mis datos intactos cuando abro un archivo CSV?

Convertir los campos en texto después de importar no ayudará, ya que los datos ya estaban enredados ...

henryaaron
fuente
¿Qué quiere decir con "los datos ya estaban enredados"? ¿Te refieres a convertir a texto después de abrir el archivo?
Daniel
Al abrir el archivo, tanto Excel como Numbers cambiarán en torno a todos sus datos. Entonces, sea lo que sea que tenga que hacer, tengo que hacerlo antes de abrir el archivo.
henryaaron
7 años después, esto todavía parece ser un agujero enorme. Es problemático que un viaje de ida y vuelta desde csv -> Números -> csv modifique las celdas. Los ceros iniciales son un buen ejemplo. Otro es el porcentaje (por ejemplo, el 20% se convierte en 0.2). Otra es la notación científica (por ejemplo, 1E-2 se convierte en 0.01). Ajustar entre comillas dobles no ayuda, y el prefijo con un apóstrofe se interpreta literalmente. Creo que la mejor opción podría ser prefijar todo con un apóstrofe antes de importar y quitar todos los apóstrofes iniciales después de la exportación ...
Heath Raftery

Respuestas:

7

Si un campo en un archivo CSV comienza con un apóstrofe ( '), tanto Excel como Numbers tratarán el campo como texto y no lo procesarán con ningún formato numérico.

Parece que sus archivos CSV intentan forzar la representación del texto a través de campos de números encerrados entre comillas dobles, pero Numbers y Excel no parecen dar la pista de que los números de comillas dobles deben tratarse como cadenas. El truco parece ser modificar los archivos CSV para que utilicen el truco "comienza con un solo apóstrofe" en lugar del truco "contenido entre comillas dobles" para los campos numéricos, pero conserve las comillas dobles para los campos de texto que incluyen puntuación (incluyendo comas, comillas, saltos de línea, etc.).

Para procesar sus archivos CSV para que lo hagan, puede crear una aplicación Automator.

En Automator, cree una nueva aplicación.

Tendrá una sola acción: Ejecutar Shell Script (pasando la entrada como argumentos). Aquí está el guión:

for f in "$@"
do
    perl -pi -e "s/\"\"([0-9A-Za-z: \.\-+]+)\"/'\1/g" "$f"
done

Guarde la aplicación resultante en su escritorio. Coloque cualquier archivo CSV que desee usar en Numbers en el icono de la aplicación, y se convertirán para que Numbers mantenga los números en los campos como números literales, y no los formatee ni deseche la información.

Haga una copia de seguridad de sus datos antes de intentar esto; Es posible que una cadena especialmente extrañamente construida en un campo de registro arroje los resultados aquí.

ingrese la descripción de la imagen aquí

Daniel
fuente
Hacer que este trabajo parezca que necesita algo de interacción. Esta discusión sería mejor en el chat
Daniel
0

Específicamente, aquí se explica cómo manejar los ceros a la izquierda . Creo que su pregunta es más sobre el formato de celda que la autocorrección.

Como se mencionó, la función de autocorrección en sí es un elemento del sistema y debe deshabilitarse desde las Preferencias del sistema.

Adam Eberbach
fuente
La conversión de las células para este formato no ayuda ya que los datos ya se había metido con ...
henryaaron
1
Hubiera esperado que los ceros volvieran si formatea las celdas, si Numbers elimina destructivamente esos ceros en la importación, eso realmente apestaría. Quizás tenga que formatear las celdas antes de importar.
Adam Eberbach
Definitivamente lo hace.
henryaaron
0

Huzzah, gracias a esta respuesta y a otras, ahora hay un método con los siguientes beneficios:

  • Funciona tanto en Excel como en Numbers.
  • Puede ser automatizado
  • Es invisible en los números.
  • Produce archivos CSV de impacto cero desde la importación hasta la exportación.

El truco consiste en no prefijar cada campo con un apóstrofe ni encerrarlo entre comillas dobles, sino prefijar ="y sufijar con ". Al importar Numbers, se trata el contenido del campo como una cadena y, al exportar, se suelta el prefijo y el sufijo.

Aquí hay un práctico revestimiento que procesa previamente un archivo llamado my.csv:

sed 's/^/="/;s/,/",="/g;s/$/"/' my.csv | sed 's/=""//g' > tmp.csv

El primero se sedpone ="al comienzo de cada línea, cambia cada coma a ",=", luego termina cada línea con ". El segundo sedluego elimina cualquier campo vacío, porque Numbers se ahoga en ellos. Finalmente, escribe un archivo llamado al tmp.csvque se puede hacer doble clic o pasar openpara importarlo a Numbers.

En la práctica, esto confundirá cualquier campo que tenga comas. Es mejor que solo ajuste esos campos que comienzan con números, pero luego debe tener cuidado con el inicio y el final de cada línea y su versión de expresiones regulares. Esto lo hará en macOS:

sed -E 's/(^|,)([[:digit:]][^,]*)($|,)/\1="\2"\3/g'

Es decir, haga coincidir el comienzo de la línea o una coma, un dígito y luego cualquier número de caracteres que no sean comas, luego el final de la línea u otra coma. Reemplace con el mismo principio y final, pero con el bit central envuelto en ="y ".

Heath Raftery
fuente