2011-08-16 13 views
6

Bir XLS dosyası, Excel 2003'te bir makroyla birlikte bir CSV dosyası oluşturuyor, 40'dan fazla sütunum var ve son 3 olanlar isteğe bağlı, dolayısıyla XLS'de çok fazla boş değer var Ben ihracat alt yordamını çalıştırdığımda, tüm satırlara sondaki bir virgül koymayacağım, neden? Çünkü: Eğer metinde veya CSV (virgülle ayrılmış değer) bir dosyayı kaydetmek eğer http://support.microsoft.com/kb/77295 Microsoft Office Excel'de -.-Excel, csv dosyalarındaki virgül hatalarını izliyor

, biçim, Excel çalışma her sütunun arasına sekme veya virgül koyar. Ancak, bazı metin dosyaları 16 satırlık bloklarda farklı sayıda sekme veya virgülle kaydedilebilir.

Excel tüm boş sütunlar için sekme veya virgül ayırıcıları kaydeder emin olun dosyasında son sütun en azından her 16 bazı veriler içerdiğini doğrulamak için: buraya

etrafında onların önerilen iştir dosya boyunca satırlar. Satır blokları veri içermiyorsa, son sütundaki hücrelere her 16 satıra boşluk veya başka karakterler ekleyin veya çalışma sayfasındaki sütunları yeniden sıralayın, böylece çalışma sayfasındaki son sütun her zaman bilgi içerir.

-.- microsoft! -.-

Tamam, benim ana sorun, oluşturulan dosyanın şu anda olduğu gibi belirli bir biçime ihtiyacı olan bir başka program tarafından ayrıştırılacağıdır. boş, bu gibi görünüyor ama Veri İşleme Deparment o beyaz alan hakkında şikayet ediyor ... onlara inanabilirsin !?

Neyse ben de bir bayrak ekleyin ve bulma fonksiyonu ile çıkarmak için çalıştı, ama bunu tekrar sınırlayıcı uzaklara götürecek dosyayı kaydetmek ofc ... geçmişimi okumak için

sayesinde; p

Herhangi bir öneriniz var mı?

Düzenleme: Ne yazık ki Excel kullanmanız zorunludur, veriler farklı kullanıcılar tarafından excel sayfasından manuel olarak girilir, vba kodları şablon üretimi vb. Gibi çok daha fazlasını yapar. Bu, sahip olduğum tek sorun budur. tüm süreci değiştirmek mümkün değildir.

+0

Manuel döngü hücreleri ve çıkış CSV için VBA kullanabilirsiniz? –

+0

Şu anda bunu yapıyorum .. – isJustMe

+1

Hücreleri manuel olarak yinelemek ve bir arabellekte bir CSV oluşturmak ve sonra diske yazmak için vba kullanırsanız, bu KB makalesi yerleşik CSV oluşturma ile ilgili olarak geçerli olmaz. ? –

cevap

5

El ile örnek;

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

Mükemmel! Tam olarak ihtiyacım olan şey! – isJustMe

+0

hey Alex, umarım bu konuda bana yardımcı olabilirsiniz: http://stackoverflow.com/questions/8605804/this-custom-validation-is-not-working-buti-dont-know-whats-happenning Teşekkürler! – isJustMe

0

Öneri 1) Bir CSV dosyası oluşturmak için Excel'i kullanmayı bırakın.

Veri kaynağınız nedir? Excel, verileri nereden alıyor? Belki de, Excel'i aracı olarak kullanmak yerine bir CSV oluşturmak için orijinal veri kaynağıyla bir şeyler yapabilirsiniz. Gerçekten büyük çekiçlerden hoşlanıyorsanız, Biztalk veri girişi/çıktı manipülasyonu için nihai MS aracıdır. Birkaç tane araç kutusundan çıkarılabilir, ancak CSV dosyası oluşturmak için özel bir C# programı bir araya getirme birkaç saat içinde yapılabilir.

Özet: Mümkünse daha iyi bir araç kullanın!

0

Verilerinizde virgül yoksa, bir satırdaki sütun sayısını sayar ve satır sayısını sayar ve yalnızca yeterli değilse, sonuna kadar virgül ekler bir metin okuyucu yazmak çok kolay olurdu . İdeal değil, ancak özel bir Excel'i CSV dönüştürücüsüne yazmaktan daha kolay.

+0

Öneriniz için teşekkürler! Ancak, bazı alanların açıklama alanları, diğerleri perakende satış fiyatıdır. Vb. ,, – isJustMe

0

En basit yol:

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