Produzco un informe como archivo CSV. Cuando trato de abrir el archivo en Excel, hace una suposición sobre el tipo de datos según el contenido de la celda y lo reformatea en consecuencia.
Por ejemplo, si el archivo CSV contiene
...,005,...
Entonces Excel lo muestra como 5. ¿Hay alguna manera de anular esto y mostrar 005?
Preferiría hacer algo con el archivo en sí, de modo que el usuario pueda simplemente hacer doble clic en el archivo CSV para abrirlo.
Yo uso Excel 2003.
excel
csv
formatting
number-formatting
Sergey Stadnik
fuente
fuente
Respuestas:
No hay una manera fácil de controlar el formato que aplica Excel al abrir 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 habrá mantenido los datos como una fórmula, pero copiar la columna y pegar valores especiales eliminará la fórmula pero conservará el formato.
Opción 2 : formatear 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 : cambie la extensión del archivo a .dif (formato de intercambio de datos)
Cambie la extensión del archivo y utilice el asistente de importación de archivos para controlar los formatos. Excel abre automáticamente los archivos con extensión .dif cuando se hace doble clic en ellos.
Paso a paso:
fuente
No use CSV, use SYLK.
http://en.wikipedia.org/wiki/SYmbolic_LinK_(SYLK)
Brinda mucho más control sobre el formato y Excel no intentará adivinar el tipo de campo examinando el contenido. Parece un poco complicado, pero puede salirse con la suya usando un subconjunto muy pequeño.
fuente
Esto funciona para Microsoft Office 2010, Excel versión 14
Leí mal la preferencia del OP de "hacer algo con el archivo en sí". Sigo guardando esto para aquellos que quieren una solución para formatear la importación directamente
fuente
Simplemente puede formatear su rango como Texto.
También aquí hay un buen artículo sobre los formatos numéricos y cómo puede programarlos.
fuente
De hecho, descubrí que, al menos a partir de Office 2003, puede 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.
fuente
Agregar un espacio que no se rompa 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 que no se rompa inclinando alt + 0160. Consulte aquí para obtener más información: http://en.wikipedia.org/wiki/Non-breaking_space
Probé en Excel 2010. Espero que esto pueda ayudar a las personas que aún buscan una solución bastante adecuada para este problema.
fuente
Tuve este problema al exportar datos CSV desde el código C #, y lo resolví anteponiendo los datos del cero a la izquierda con el carácter de tabulación \ t, por lo que los datos se interpretaron como texto en lugar de numéricos en Excel (sin embargo, a diferencia de anteponer otros caracteres, no lo haría ' ser visto).
Me gustó el enfoque = "001", pero esto no permitiría que los datos CSV exportados se volvieran a importar nuevamente a mi aplicación C # sin eliminar todo este formato del archivo CSV de importación (en su lugar, solo recortaré los datos de importación) .
fuente
Creo que cuando importa el archivo, puede seleccionar el Tipo de columna. Conviértalo en Texto en lugar de Número. Sin embargo, no tengo una copia frente a mí para verificar.
fuente
Cargue csv en oleDB y fuerce todos los tipos de datos inferidos a la cadena
Hice la misma pregunta y luego la respondí con código.
Básicamente, cuando se carga el archivo csv, el controlador oledb hace suposiciones, usted puede decirle qué suposiciones debe realizar.
Sin embargo, mi código obliga a todos los tipos de datos a encadenarse ... es muy fácil cambiar el esquema. para mis propósitos, usé un xslt para obtener ti de la manera que quería, pero estoy analizando una amplia variedad de archivos.
fuente
Sé que esta es una pregunta antigua, pero tengo una solución que no figura aquí.
Cuando genere el csv, agregue un espacio después de la coma pero antes de su valor, por ejemplo
, 005,
.Esto funcionó para evitar el formateo automático de fecha en Excel 2007 de todos modos.
fuente
El método del Asistente para importación de 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):
fuente
Simplemente agregue 'antes del número en el documento CSV.
fuente
Esto me ha estado volviendo loco todo el día (ya que de hecho no puede controlar los tipos de columna de Excel antes de abrir el archivo CSV), y esto funcionó para mí, usando 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
fuente
Al abrir un 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, puede formatear la celda de la forma que desee.
Intenté con Excel 2007 y pareció funcionar.
fuente
Bueno, Excel nunca muestra el asistente para archivos CSV. Si le cambia el nombre a .txt, verá el asistente cuando haga un Archivo> Abrir en Excel la próxima vez.
fuente
Ponga una cita simple antes del campo. Excel lo tratará como texto, incluso si parece un número.
EDITAR: Esto está mal. El truco del apóstrofe solo funciona cuando se ingresan datos directamente en Excel. Cuando lo usa en un archivo CSV, aparece el apóstrofo en el campo, lo que no desea.
http://support.microsoft.com/kb/214233
fuente