2011-08-16 13 views
6

Ho un file XLS crea un file CSV con una macro su Excel 2003, ho 40+ colonne e gli ultimi 3 sono opzionali, quindi ci sono molti valori vuoti su XLS , quando eseguo la subroutine di esportazione non metterà una virgola finale su tutte le righe, perché? Perché: http://support.microsoft.com/kb/77295 -.-Errore virgola finale di Excel nei file CSV

In Microsoft Office Excel, se si salva un file nel testo o in formato CSV (valori separati da virgola) formato, Excel mette le schede o le virgole tra ogni colonna del foglio di lavoro. Tuttavia, alcuni file di testo possono essere salvati con un numero diverso di tabulazioni o virgole in blocchi di 16 righe.

Ecco il loro lavoro suggerito in giro:

Per assicurarsi che Excel salva tabulazione o virgola delimitatori per tutte le colonne vuote, verificare che l'ultima colonna del file contiene alcuni dati in almeno ogni 16 righe in tutto il file. Se i blocchi di righe non contengono dati, aggiungi spazi o altri caratteri in ogni 16 righe alle celle nell'ultima colonna o riordina le colonne nel foglio di lavoro in modo che l'ultima colonna del foglio di lavoro contenga sempre le informazioni.

-.- modo per passare al microsoft! -.-

Ok quindi il mio problema principale è che il file generato verrà analizzato da un altro programma fuori dal mio ambito che ha bisogno di quel formato specifico dato che ora sto aggiungendo uno spazio ogni 16 righe se il campo è vuoto, questo sembra farlo ma il reparto elaborazione dati si lamenta di quello spazio bianco ... riesci a crederci !?

Comunque ho anche provato ad aggiungere una bandiera e rimuoverla con la funzione Trova, ma OFC quando si salva il file si toglierà di nuovo i delimitatori ...

grazie per aver letto la mia storia; p

Qualche suggerimento?

Edit: Purtroppo usando Excel è d'obbligo, i dati vengono immessi manualmente attraverso il foglio excel da diversi utenti, i codici VBA non molto di più come la generazione del modello, ecc .. questo è l'unico problema che sto avendo e non è possibile cambiare l'intero processo.

+0

ciclo manualmente le cellule e utilizzare VBA per l'output un file CSV? –

+0

Questo è ciò che sto facendo attualmente. – isJustMe

+1

Se si utilizza vba per iterare manualmente le celle e creare un CSV in un buffer e quindi scriverlo su disco, l'articolo KB non si applica in quanto correlato alla creazione CSV incorporata ? –

risposta

5

Esempio manuale;

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

Perfetto! Esattamente quello di cui avevo bisogno! – isJustMe

+0

hey Alex, spero che tu possa aiutarmi su questo: http://stackoverflow.com/questions/8605804/this-custom-validation-is-not-working-buti-dont-know-whats-happenning Grazie! – isJustMe

0

Suggerimento 1) Interrompere l'utilizzo di Excel per generare un file CSV.

Qual è la tua fonte di dati? Da dove vengono ricavati i dati da Excel? Forse puoi fare qualcosa con l'origine dati originale per generare un CSV invece di usare Excel come intermediario. Se ti piacciono i martelli davvero grandi, Biztalk è lo strumento MS più avanzato per la manipolazione di input/output dei dati. Pochi possono estrarre quello dalla loro cassetta degli attrezzi, ma lanciando insieme un programma C# personalizzato per generare un file CSV può essere fatto in un paio d'ore.

In breve: Se possibile, utilizzare uno strumento migliore!

0

Se non ci sono virgole nei dati, sarebbe molto facile scrivere un lettore di testo che attraversa e conta il numero di colonne in una riga e basta aggiungere virgole alla fine se non ci sono abbastanza . Non è l'ideale, ma probabilmente è più facile che scrivere un convertitore personalizzato da Excel a CSV.

+0

Grazie per il suggerimento! Tuttavia ho un sacco di virgole, alcuni dei campi sono campi descrizione, altri sono al dettaglio .. ecc., – isJustMe

0

modo più semplice:

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