2011-08-16 7 views
6

Mam plik XLS tworzy plik CSV z makrem na Excel 2003, mam ponad 40 kolumn, a ostatnie 3 są opcjonalne, dlatego istnieje wiele pustych wartości na XLS , kiedy uruchomię podprocedurę eksportowania, nie wstawię przecinka na wszystkich wierszach, dlaczego? Ponieważ: http://support.microsoft.com/kb/77295 -.-Błąd kończący przecinek Excel w plikach CSV

W programie Microsoft Office Excel, jeśli zapiszesz plik w tekście lub w formacie CSV (wartości oddzielonych przecinkami) w formacie Excel lub przecinki stawia występy między każdej kolumny arkusza. Jednak niektóre pliki tekstowe mogą być zapisywane z inną liczbą zakładek lub przecinków w blokach 16-wierszowych.

tutaj jest ich sugerowana obejść:

Aby upewnić się, że Excel zapisuje zakładki lub przecinkami ograniczniki dla wszystkich pustych kolumn, upewnij się, że ostatnia kolumna w pliku zawiera jakieś dane w co najmniej raz na 16 wiersze w całym pliku. Jeśli bloki wierszy nie zawierają danych, dodaj spacje lub inne znaki w każdym z 16 wierszy do komórek w ostatniej kolumnie lub uporządkuj kolumny w arkuszu, aby ostatnia kolumna w arkuszu roboczym zawsze zawierała informacje.

-.- droga do Microsoftu! -.-

OK, więc moim głównym problemem jest to, że wygenerowany plik zostanie przeanalizowany przez inny program poza moim zasięgiem, który potrzebuje tego konkretnego formatu, ponieważ teraz dodam puste pole co 16 wierszy, jeśli pole jest puste, wydaje się, że to robi, ale Data Processing Deparment narzeka na tę białą przestrzeń ... możesz w to uwierzyć !?

Zresztą Próbowałem też dodać flagę i usunąć go z funkcji znaleźć, ale ofc po zapisaniu pliku to zabrać ponownie separatory ...

dzięki za przeczytanie mojego historię; p

Wszelkie sugestie?

Edycja: Niestety przy użyciu Excela musi, dane są ręcznie wprowadzane przez arkusz excel przez różnych użytkowników, kody vba ma dużo więcej jak generowanie szablonu itp. Jest to jedyny problem, który mam i to nie można zmienić całego procesu.

+0

Ręcznie pętla komórki i użyć VBA do wyprowadzenia CSV? –

+0

To właśnie robię obecnie. – isJustMe

+1

Jeśli używasz vba do ręcznego iterowania komórek i budowania pliku CSV w buforze, a następnie zapisywania go na dysk, to ten artykuł KB nie ma zastosowania, ponieważ jest związany z wbudowanym tworzeniem CSV ? –

Odpowiedz

5

Przykład ręczny;

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

Idealnie! Dokładnie to, czego potrzebowałem! – isJustMe

+0

Hej Alex, mam nadzieję, że możesz mi pomóc w tej sprawie: http://stackoverflow.com/questions/8605804/this-custom-validation-is-not-working-buti-dont-know-whats-happenning Dzięki! – isJustMe

0

Sugestia 1) Przestań używać Excela do generowania pliku CSV.

Jakie jest Twoje źródło danych? Skąd Excel pobiera dane? Być może możesz coś zrobić z oryginalnym źródłem danych, aby wygenerować plik CSV, zamiast używać programu Excel jako pośrednika. Jeśli lubisz naprawdę duże młotki, Biztalk jest najlepszym narzędziem MS do manipulacji danymi wejściowymi/wyjściowymi. Nieliczni mogą wyciągnąć ten jeden ze swojego zestawu narzędzi, ale wyrzucenie razem niestandardowego programu C# do wygenerowania pliku CSV może zająć kilka godzin.

W skrócie: Jeśli to możliwe, użyj lepszego narzędzia!

0

Jeśli nie masz przecinków w swoich danych, bardzo łatwo byłoby napisać czytnik tekstu, który przechodzi i liczy liczbę kolumn w linii i po prostu dodawać przecinki do końca, jeśli nie ma wystarczającej liczby . To nie jest idealne, ale prawdopodobnie łatwiejsze niż pisanie niestandardowego konwertera Excel na CSV.

+0

Dzięki za sugestię! Mam jednak wiele przecinków, niektóre pola to pola opisu, inne to koszt detaliczny .. itd., – isJustMe

0

Najprostszy sposób:

ActiveWorkbook.SaveAs "MyFileNameAndDir.csv", xlCSV, Local:=True 
Powiązane problemy