Pregunta

Produzco un informe como un archivo CSV. Cuando trato de abrir el archivo en Excel, se hace una suposición sobre el tipo de datos en función del contenido de la celda y se reformatea en consecuencia.

Por ejemplo, si el archivo CSV contiene

...,005,...

Entonces Excel lo muestra como 5. ¿Hay alguna forma de anular esto y mostrar 005?

Preferiría hacer algo con el archivo en sí, para que el usuario pueda simplemente hacer doble clic en el archivo CSV para abrirlo.

Yo uso Excel 2003.

¿Fue útil?

Solución

No hay una manera fácil de controlar el formato que aplica Excel cuando se abre un archivo .csv. Sin embargo, a continuación se enumeran tres enfoques que podrían ayudar.

Mi preferencia es la primera opción.

Opción 1: cambiar los datos en el archivo

Puede cambiar los datos en el archivo .csv de la siguiente manera ..., = "005" , ... Esto se mostrará en Excel como ..., 005 , ...

Excel mantendrá los datos como una fórmula, pero al copiar la columna y al usar pegar valores especiales se eliminará la fórmula pero se conservará el formato

Opción 2 : formatea los datos

Si es simplemente un problema de formato y todos sus datos en esa columna tienen una longitud de tres dígitos. Luego, abra los datos en Excel y luego formatee la columna que contiene los datos con este formato personalizado 000

Opción 3 : cambia la extensión del archivo a .dif (formato de intercambio de datos)

Cambie la extensión del archivo y use el asistente de importación de archivos para controlar los formatos. Excel abre automáticamente los archivos con una extensión .dif cuando se hace doble clic.

Paso a paso:

  • Cambie la extensión del archivo de .csv a .dif
  • Haga doble clic en el archivo para abrirlo en Excel.
  • Se lanzará el 'Asistente para importar archivos'.
  • Establezca el 'Tipo de archivo' en 'Delimitado' y haga clic en el botón 'Siguiente'.
  • Debajo de Delimitadores, marca "Coma" y haz clic en el botón "Siguiente".
  • Haga clic en cada columna de sus datos que se muestra y seleccione un 'Formato de datos de columna'. La columna con el valor '005' debe formatearse como 'Texto'.
  • Haga clic en el botón Finalizar, Excel abrirá el archivo con los formatos que haya especificado.

Otros consejos

No uses CSV, usa SYLK.
http://en.wikipedia.org/wiki/SYmbolic_LinK_(SYLK)

Da mucho más control sobre el formateo, y Excel no intentará adivinar el tipo de campo al examinar el contenido. Parece un poco complicado, pero puedes salirte con un subconjunto muy pequeño.

Esto funciona para Microsoft Office 2010, Excel versión 14

He leído mal la preferencia de OP " para hacer algo en el archivo en sí. " Todavía guardo esto para aquellos que quieren una solución para formatear la importación directamente

  1. Abra un archivo en blanco (nuevo) (Archivo - > Nuevo del libro de trabajo)
  2. Abra el Asistente de importación (Datos - > De texto)
  3. Seleccione su archivo .csv e importe
  4. En el cuadro de diálogo, seleccione "Delimitado" y haga clic en Siguiente.
  5. Elija sus delimitadores (deseleccione todo menos 'coma'), elija sus calificadores de texto (probablemente {Ninguno}), haga clic en Siguiente
  6. En el campo Vista previa de datos , seleccione la columna que desea que sea texto. Se debe resaltar.
  7. En el campo Formato de datos de columna , seleccione 'Texto'.
  8. Haz clic en terminado.

Puedes simplemente formatear tu rango como Texto.

También aquí es un buen artículo sobre los formatos de los números y cómo puede programarlos.

En realidad, descubrí que, al menos a partir de Office 2003, puedes guardar una hoja de cálculo de Excel como un archivo XML. Por lo tanto, puedo producir un archivo XML y cuando haga doble clic en él, se abrirá en Excel. Proporciona el mismo nivel de control que SYLK, pero la sintaxis XML es más intuitiva.

La adición de un espacio sin interrupciones en la celda podría ayudar. Por ejemplo: "firstvalue";"secondvalue";"005 ";"othervalue"

Obliga a Excel a tratarlo como un texto y el espacio no es visible. En Windows, puede agregar un espacio sin interrupciones inclinando alt + 0160. Consulte aquí para obtener más información: http://en.wikipedia.org/wiki/Non-breaking_space

Probado en Excel 2010. Espero que esto pueda ayudar a las personas que aún buscan una solución bastante adecuada para este problema.

Tuve este problema al exportar datos CSV desde el código C #, y lo resolví anteponiendo los datos del cero inicial con el carácter de tabulación, por lo que los datos se interpretaron como texto en lugar de numérico en Excel (aunque a diferencia de otros caracteres, no se vería).

Me gustó el = " 001 " enfoque, pero esto no permitiría que los datos CSV exportados se vuelvan a importar de nuevo a mi aplicación C # sin eliminar todo este formato del archivo CSV de importación (en lugar de eso solo recortaré los datos de importación).

Creo que cuando importas el archivo puedes seleccionar el Tipo de columna. Hazlo texto en lugar de número. No tengo una copia delante de mí en este momento para verificar.

Cargue csv en oleDB y obligue a todos tipos de datos inferidos a cadena

Le hice la misma pregunta y luego la respondí con un código.

básicamente cuando se carga el archivo csv, el controlador oledb hace suposiciones, puede decirle qué suposiciones debe hacer.

Mi código obliga a todos los tipos de datos a la cadena, aunque ... es muy fácil cambiar el esquema. para mis propósitos utilicé un xslt para obtener ti de la forma que quería, pero estoy analizando una amplia variedad de archivos.

Sé que esta es una pregunta antigua, pero tengo una solución que no aparece aquí.

Cuando produzcas el csv, agrega un espacio después de la coma pero antes de tu valor, p. , 005, .

Esto funcionó para evitar el formato de fecha automático en Excel 2007 de todos modos.

El método del Asistente para importar texto NO funciona cuando el archivo CSV que se está importando tiene saltos de línea dentro de una celda. Este método maneja este escenario (al menos con datos delimitados por tabulaciones):

  1. Crear nuevo archivo de Excel
  2. Ctrl + A para seleccionar todas las celdas
  3. En el cuadro combinado Formato de número, seleccione Texto
  4. Abrir archivo delimitado por tabulaciones en el editor de texto
  5. Seleccionar todo, copiar y pegar en Excel

Esto me ha estado volviendo loco todo el día (ya que, de hecho, no puedes controlar los tipos de columna de Excel antes de abrir el archivo CSV), y esto funcionó para mí, utilizando VB.NET y Excel Interop:

        'Convert .csv file to .txt file.
        FileName = ConvertToText(FileName)

        Dim ColumnTypes(,) As Integer = New Integer(,) {{1, xlTextFormat}, _
                                                        {2, xlTextFormat}, _
                                                        {3, xlGeneralFormat}, _
                                                        {4, xlGeneralFormat}, _
                                                        {5, xlGeneralFormat}, _
                                                        {6, xlGeneralFormat}}

        'We are using OpenText() in order to specify the column types.
        mxlApp.Workbooks.OpenText(FileName, , , Excel.XlTextParsingType.xlDelimited, , , True, , True, , , , ColumnTypes)
        mxlWorkBook = mxlApp.ActiveWorkbook
        mxlWorkSheet = CType(mxlApp.ActiveSheet, Excel.Worksheet)


Private Function ConvertToText(ByVal FileName As String) As String
    'Convert the .csv file to a .txt file.
    'If the file is a text file, we can specify the column types.
    'Otherwise, the Codes are first converted to numbers, which loses trailing zeros.

    Try
        Dim MyReader As New StreamReader(FileName)
        Dim NewFileName As String = FileName.Replace(".CSV", ".TXT")
        Dim MyWriter As New StreamWriter(NewFileName, False)
        Dim strLine As String

        Do While Not MyReader.EndOfStream
            strLine = MyReader.ReadLine
            MyWriter.WriteLine(strLine)
        Loop

        MyReader.Close()
        MyReader.Dispose()
        MyWriter.Close()
        MyWriter.Dispose()

        Return NewFileName
    Catch ex As Exception
        MsgBox(ex.Message)
        Return ""
    End Try

End Function

Al abrir un archivo CSV, aparece el asistente de importación de texto. En el último paso del asistente, debería poder importar la columna específica como texto, conservando así el prefijo '00'. Después de eso, puedes formatear la celda de la forma que quieras.

Lo intenté con Excel 2007 y pareció funcionar.

Bueno, Excel nunca muestra el asistente para archivos CSV. Si cambia el nombre a .txt, verá el asistente cuando haga un Archivo > Abrir en Excel la próxima vez.

Ponga una sola cita antes del campo. Excel lo tratará como texto, incluso si parece un número.

...,`005,...

EDITAR: Esto está mal. El truco de apóstrofe solo funciona cuando se ingresan datos directamente en Excel. Cuando lo usa en un archivo CSV, el apóstrofe aparece en el campo, que no desea.

http://support.microsoft.com/kb/214233

Simplemente agregue 'antes del número en el documento CSV.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top