Excel aktarımında hesaplanabilir kolonlar oluşturmak ve veri göndermek

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
tolgaozb
Üye
Mesajlar: 70
Kayıt: 26 Ara 2003 12:22
Konum: Karşıyaka
İletişim:

Excel aktarımında hesaplanabilir kolonlar oluşturmak ve veri göndermek

Mesaj gönderen tolgaozb »

Programımdaki gridleri excele renki aktarabilmek için aşağıdaki excel objesi oluşturma ve içine değerleri gönderme şeklinde bir yöntem kullanıyorum.
Burada her bir hücreye 3,4 veya 10 vs. gibi sayısal değerler gönderdiğimde
excelde bu hücreler hesaplanabilir integer değerler olarak oluşmuyor.İlgili her bir hücreye excelde tıklanıp yanında beliren sarı ikona tıklamak ve "Sayıya Dönüştür" denilmesi gerekiyor.
Aşağıdaki kod bloğunu kullanark integer değerleri hesaplanabilir şekilde excele göndermenin yolu nedir.Ya da koda nasıl bir ilave yapmak gerekiyor.
İlgili kolon 4. numaralı kolon ve if col=4 then sheet.Cells[row, col].NumberFormat:='0,000'; şeklinde göndremelerde işer yaramıyor.
Yardımlarınız için şimdiden teşekkürler

Kod: Tümünü seç

 XApp := CreateOleObject('Excel.Application');
  XApp.Visible := true;
  XApp.WorkBooks.Add(-4167);
  XApp.WorkBooks[1].WorkSheets[1].Name := 'Sheet1';
  sheet := XApp.WorkBooks[1].WorkSheets['Sheet1'];
  dbKAynak := gridGorunum.DataController.DataSet;
  for filName := 0 to dbKAynak.FieldCount - 1 do
  begin
    q := filName + 1;
    sheet.Cells[1, q] := dbDenKolonAdBul(dbKAynak.fields[filName].FieldName);
  end;

  for r := 0 to dbKAynak.RecordCount - 1 do
  begin
    for c := 0 to dbKAynak.FieldCount - 1 do
    begin
      row := r + 2;
      col := c + 1;
      sheet.Cells[row, col] := dbKAynak.fields[c].AsString;
      sheet.Cells[row, col].interior.Color := gorunumGunRengi(dbKAynak.fields[c].AsString);
    end;
    dbKAynak.Next;
  end;

  kayitSayisi := dbKAynak.RecordCount - 1;
  if kayitSayisi = 0 then
    exit;

  XApp.WorkSheets['Sheet1'].Range['A1:AA1'].Font.Bold := true;
  XApp.WorkSheets['Sheet1'].Range['A1:K1'].Borders.LineStyle := 13;
  XApp.WorkSheets['Sheet1'].Range['A2:K' + inttostr(kayitSayisi - 1)]
    .Borders.LineStyle := 1;
  XApp.WorkSheets['Sheet1'].Columns[1].ColumnWidth := 25;
  XApp.WorkSheets['Sheet1'].Columns[2].ColumnWidth := 7;
  XApp.WorkSheets['Sheet1'].Columns[3].ColumnWidth := 19;
  XApp.WorkSheets['Sheet1'].Columns[4].ColumnWidth := 10;
  XApp.WorkSheets['Sheet1'].Columns[5].ColumnWidth := 10;
  XApp.WorkSheets['Sheet1'].Columns[6].ColumnWidth := 10;
  XApp.WorkSheets['Sheet1'].Columns[7].ColumnWidth := 10;
  XApp.WorkSheets['Sheet1'].Columns[8].ColumnWidth := 10;
  XApp.WorkSheets['Sheet1'].Columns[9].ColumnWidth := 10;
  XApp.WorkSheets['Sheet1'].Columns[10].ColumnWidth := 10;
  XApp.WorkSheets['Sheet1'].Columns[11].ColumnWidth := 10;
T.Tolga Özbaltalar - http://www.veridizayn.com
erdogan_ozkaya
Üye
Mesajlar: 839
Kayıt: 03 Eki 2007 02:00

Re: Excel aktarımında hesaplanabilir kolonlar oluşturmak ve veri göndermek

Mesaj gönderen erdogan_ozkaya »

Merhaba,

ekteki componenent çok işine yarayacaktır.
http://dosya.co/g05rr8ozabpu/ExcelExport.rar.html

kolay gelsin
ertank
Kıdemli Üye
Mesajlar: 1716
Kayıt: 12 Eyl 2015 12:45

Re: Excel aktarımında hesaplanabilir kolonlar oluşturmak ve veri göndermek

Mesaj gönderen ertank »

Merhaba,

Kodun ile ilgili bir iki noktaya dikkat etmen gerekli. Bunları yaptıktan sonra yine kontrol edersin.

Kod: Tümünü seç

// Eğer bilgisayarda EXCEL yüklü değil ise aşağıdaki kod hata verir. (Exception oluşur)
// Eğer Excel zaten çalışıyor ise aşağıdaki kod yine hata verir.
// XApp := CreateOleObject('Excel.Application');

// Yukarıdaki satır yerine aşağıdaki gibi bir kod yazmanda fayda var
 try
   // Excel çalışıyor ise Bunu kullan
    XApp := GetActiveOleObject('Excel.Application');
  except
    try
      // Eğer Excel çalışmıyor ise yeni bir tane çalıştırmayı dene
      XApp := CreateOleObject('Excel.Application');
    except
      ShowMessage('Excel çalıştırılamıyor. Bilgisayarda Excel yüklü olmayabilir.');
      Exit;
    end;
  end;

  XApp.Visible := true;
  XApp.WorkBooks.Add(-4167);
  XApp.WorkBooks[1].WorkSheets[1].Name := 'Sheet1';
  sheet := XApp.WorkBooks[1].WorkSheets['Sheet1'];
  dbKAynak := gridGorunum.DataController.DataSet;
  for filName := 0 to dbKAynak.FieldCount - 1 do
  begin
    q := filName + 1;
    sheet.Cells[1, q] := dbDenKolonAdBul(dbKAynak.fields[filName].FieldName);
  end;

  for r := 0 to dbKAynak.RecordCount - 1 do
  begin
    for c := 0 to dbKAynak.FieldCount - 1 do
    begin
// Aşağıdaki iki satıra normalde ihtiyacın yok. Direk döngü içine yazabilirsin bu hesabı
//      row := r + 2;
//      col := c + 1;
      // Atamayı yaparken Cells[r,c].Value şeklinde yapmanda fayda var.
      // Atamayı direk numerik olarak yapmanda fayda var.  (.AsFloat)
      sheet.Cells[r + 2, c + 1].Value := dbKAynak.fields[c].AsFloat;
      sheet.Cells[r + 2, c + 1].interior.Color := gorunumGunRengi(dbKAynak.fields[c].AsString);
    end;
    dbKAynak.Next;
  end;

  kayitSayisi := dbKAynak.RecordCount - 1;
  if kayitSayisi = 0 then
    exit;
Kullanıcı avatarı
tolgaozb
Üye
Mesajlar: 70
Kayıt: 26 Ara 2003 12:22
Konum: Karşıyaka
İletişim:

Re: Excel aktarımında hesaplanabilir kolonlar oluşturmak ve veri göndermek

Mesaj gönderen tolgaozb »

Merhaba
Bilgiler işime yaradı çok teşekkürler.
Excel açıkken herhangi bir hata mesajı almıyorum.Aynı rapor tekrar ekrana çıkıyor.En büyük problem hesaplanır şekilde sayısal değerleri atamamakdı o da halloldu.Tekrar teşekkürler.
T.Tolga Özbaltalar - http://www.veridizayn.com
Cevapla