2011-08-16 86 views
6

Tengo un archivo XLS crea un archivo CSV con una macro en Excel 2003, tengo más de 40 columnas y las últimas 3 son opcionales, por lo tanto, hay muchos valores vacíos en XLS , cuando ejecuto la subrutina de exportación, no colocará una coma al final en todas las filas, ¿por qué? Porque: http://support.microsoft.com/kb/77295 -.-Error de coma final de Excel en archivos csv

En Microsoft Office Excel, si guarda un archivo en el texto o en el formato CSV (valores separados por comas) formato, Excel pone fichas o comas entre cada columna de la hoja de trabajo. Sin embargo, ciertos archivos de texto se pueden guardar con un número diferente de pestañas o comas en bloques de 16 filas.

aquí es su trabajo sugerida en torno a:

Para asegurarse de que Excel guarda tabulación o comas delimitadores para todas las columnas vacías, compruebe que la última columna en el archivo contiene algunos datos en por lo menos cada 16 filas en todo el archivo. Si los bloques de filas no contienen datos, agregue espacios u otros caracteres en cada 16 filas a las celdas en la última columna, o reordene las columnas en la hoja de trabajo para que la última columna en la hoja de trabajo siempre contenga información.

-.- way to go microsoft! -.-

Ok, mi principal problema es que el archivo generado será analizado por otro programa fuera de mi alcance que necesita ese formato específico como lo es ahora. Estoy agregando un espacio en blanco cada 16 filas si el campo está vacío, parece que lo hace, pero el departamento de procesamiento de datos se queja de ese espacio en blanco ... ¿pueden creerlo?

De todos modos también trataron de añadir una bandera y quitarlo con la función de búsqueda, pero OFC cuando se guarda el archivo se quitará los delimitadores de nuevo ...

gracias por leer mi historia; p

¿Alguna sugerencia?

Editar: Desafortunadamente usando Excel es obligatorio, los datos se ingresan manualmente a través de la hoja de Excel por diferentes usuarios, los códigos vba hacen mucho más como generación de plantillas, etc. este es el único problema que tengo y no es factible cambiar todo el proceso.

+0

bucle manualmente las células y utilizar VBA para dar salida a un archivo CSV? –

+0

Eso es lo que estoy haciendo actualmente ... – isJustMe

+1

Si usa vba para iterar manualmente las celdas y crear un CSV en un búfer y luego escribirlo en el disco, ese artículo de KB no se aplica ya que está relacionado con la creación de CSV incorporada ? –

Respuesta

5

Ejemplo manual;

Dim r As Range: Set r = Range("A1:C10") '// or ActiveSheet.UsedRange for everything 
Dim buffer As String, delimiter As String, c As Range 
Dim i As Long 

For Each c In r 
    If (i Mod r.Columns.Count) = 0 Then 
     If (Len(buffer)) Then delimiter = vbCrLf 
    Else 
     delimiter = "," 
    End If 
    buffer = buffer & delimiter & """" & CStr(c.Value) & """" '//or c.text to preserve formatting 
    i = (i + 1) 
Next 

Open "c:\xxx.csv" For Output As #1 
    Print #1, buffer 
Close #1 
+0

¡Perfecto! ¡Exactamente lo que necesitaba! – isJustMe

+0

hey Alex, espero que me puedan ayudar en este: http://stackoverflow.com/questions/8605804/this-custom-validation-is-not-working-buti-dont-know-whats-happenning ¡Gracias! – isJustMe

0

Sugerencia 1) Deje de usar Excel para generar un archivo CSV.

¿Cuál es su fuente de datos? ¿De dónde saca Excel los datos? Tal vez pueda hacer algo con la fuente de datos original para generar un archivo CSV en lugar de utilizar Excel como intermediario. Si le gustan los martillos grandes, Biztalk es la mejor herramienta de MS para la manipulación de entrada/salida de datos. Pocos pueden sacarlo de su caja de herramientas, pero armar un programa personalizado de C# para generar un archivo CSV se puede hacer en un par de horas.

En resumen: ¡Si es posible, use una herramienta mejor!

0

Si no tiene comas en sus datos, sería muy fácil escribir un lector de texto que pase y cuente el número de columnas en una línea y simplemente agregar comas al final si no hay suficientes . No es ideal, pero probablemente sea más fácil que escribir un convertidor personalizado de Excel a CSV.

+0

¡Gracias por la sugerencia! Sin embargo, tengo muchas comas, algunos de los campos son campos de descripción, otros son costos de venta minorista ... etc. ,, – isJustMe

0

manera más simple:

ActiveWorkbook.SaveAs "MyFileNameAndDir.csv", xlCSV, Local:=True 
Cuestiones relacionadas