2012-08-17 13 views
5

Verileri bir CxDBGrid'den bir Excel dosyasına aktarıyorum. Dosyayı oluşturabilir ve içindeki verileri kopyalayabiliyorum, ancak sütun biçimlendirmesinde gerçekten sorun yaşıyorum. Verileri bir DB'den çektiğime göre, elektronik tabloyu türünü yansıtmak istiyorum: NUMBER, VARCHAR2, DATE vb. Ben görsel bir makro oluşturulan , VBA kodu aramaya gitti ve Delphi projede çoğaltılmış:Excel sütun türlerini ve biçimlendirmesini nasıl ayarlarım?

sheet.Columns[K+2].NumberFormat := '0,000'; //Number 
sheet.Columns[K+2].NumberFormat := '@'; //Text 
sheet.Columns[K+2].NumberFormat := 'm/d/yyyy'; //Date 

sayısı biçimlendirme çalışmaları Tamam zamanların en, ancak diğer iki yok. Oluşturulan dosyayı açtığımda, metin sütunları "Özel" olarak gösterilir ve her hücre "-64" görüntüler. Bir hücreyi düzenlemek için gidersem, doğru değer aslında var. Tarih başka bir sayıdır: DB'nin biçimi gg/aa/yyyy'dir ve Excel'e olduğu gibi beslerse, her şey yoluna girer. Doğru formatı ayarlamayı denedim, ancak Excel bunu tanımıyor.

Herhangi bir ipuçları?

Ayrıca sütun genişliğini ayarlıyorum. Bu kusursuz çalışıyor.

+0

Sana cxDbGrid deyince Geliştirici Ekspres bileşenlere kastediyoruz varsayalım. Öyleyse, Developer Express tarafından sağlanan ExportGridToExcel() prosedürünü kullanarak Excel'e mi ihracat yapıyorsunuz? –

+0

Bunu denedim ancak veri türünü ayarlamada sorunlar var. Bu yüzden el ile bir şeyler yapmak istiyorum – asg2012

+0

Ben ExportGridToExcel() veri türleri ile ilgili herhangi bir sorun olmadan veya ihracat üzerinde biçimlendirme olmadan bir dizi kullanın. Kodunuzu görmeden neden sizin için çalışmadığını anlamak zor. Kendi ihracatınızı yazma zahmetine gitmek yerine, size yardımcı olabilecekleri için Developer Express destek sitesinden rica ediyorum. Onların desteği büyüktür ve genellikle çok hızlı bir şekilde size bir çözüm yardımcı olabilir. –

cevap

3

"El ile işleri nasıl yapıyorsunuz" demediniz, bu da insanların yaptığınız şeyi tamamen tahmin etmeleri gerektiği anlamına gelir. Ben bu bileşen ile estensive deneyime sahip Geliştirici Express gelen Ekspres Elektronik Tablo bileşeni kullanıyorsanız varsayarsak

  1. : İşte benim vahşi tahmin. Rasgele sayısal formatları desteklemez. Tam olarak iki ondalık basamaklı bir "para" biçimini (0.00) destekler. Üç veya bir veya başka bir ondalık basamak sayısını desteklemez. Öyleyse, bu, Express elektronik tablosunda bilinen bir tasarım sorunudur.

  2. El ile, yukarıda gösterildiği gibi "sayfa" ifadesi bir OLE nesnesi olduğu ve OLE Otomasyonu üzerinden Excel'e iletişim kurduğunuz anlamına gelirse, tek tek veya bir aralık olarak değil, bir sütun olarak CELLS'yi biçimlendirmeniz gerekir. nesneler. Sütun nesne biçimlerinin, hücre değerlerini nasıl geçersiz kılacağından emin değilim. Hücrelerin biçimlendirilmesi genellikle hücre maddesine göre bir hücredir ve bu şekilde ele alınmalıdır.

  3. Gerçekten bunun düzgün bir şekilde çalışmasını istiyorsanız, Excel'i OLE otomasyonu üzerinden kullanmayacaksınız, uygun bir Excel XLS formatı özellikli yazma kitaplığı elde edersiniz. Doğrudan CX (DevEx) db ızgarasından doğru sonuçlar alabileceğinden emindim, ama forumlarında değil, burada sorardım. Düzenli bir DB Izgarası ile, Jedi JVCL'de bulunan ve normal VCL DB Izgarası ile çalışan TJvDBGridExcelExport kullanıyorum.

4

Sorun, atanan değerlerin Unicode dizeleri olmasıdır. Bu deneyin:

sheet.Columns[K+2].NumberFormat := AnsiChar('@'); 
sheet.Columns[K+2].NumberFormat := AnsiString('m/d/yyyy'); 
İlgili konular