excele veri aktarımı

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
meguntr
Üye
Mesajlar: 78
Kayıt: 23 Eki 2003 02:09

excele veri aktarımı

Mesaj gönderen meguntr »

Merhaba arkdaşlar ben ben delphi7 kullanıyorum, paradox bir veri tabanındaki bilgileri, var olan bir excel dosyasına istediğim alanlara kayıt etmek istiyorum..
örnegin c:\excel.xls adlı bir dosyam var bunu delphide

procedure TForm1.Button1Click(Sender: TObject);
var
excel:Variant;
begin
excel:=CreateOleObject('excel.Application');//excel adında excel uygulaması oluştur.
excel.Visible:=True;
excel.Workbooks.Open['C:\excel.xls',,ReadOnly:=False];
end;

kodu ile açıyorum ama bilgileri aktarmak istediğimde

access violation hatası veriyor

yeni bir excel dosyası açıp bilgileri aktardığımda sorun yok , ama

bu acces violation hatasını neden verir ki???? :?:
Kullanıcı avatarı
naile
Admin
Mesajlar: 1873
Kayıt: 11 Haz 2003 10:11

Mesaj gönderen naile »

Ben şöyle yapıyorum :

procedure TForm.ExceleGnder1Click(Sender: TObject);
var
IIndex: OleVariant;
NomFich : WideString;
begin
NomFich := 'C:\deneme.xls';
IIndex := 1;
ExcelApplication1.Connect;
ExcelApplication1.WorkBooks.Open(NomFich,EmptyParam,EmptyParam,EmptyParam,EmptyParam, EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,0);
// excele yazdırma işlemi burda
ExcelApplication1.Visible [0] := True;
ExcelApplication1.Disconnect;
end;
Kullanıcı avatarı
husonet
Admin
Mesajlar: 2962
Kayıt: 25 Haz 2003 02:14
Konum: İstanbul
İletişim:

Mesaj gönderen husonet »

Biraz araştırdım. Delphi üzerinden Excel özelliklerini değiştirmek istiyorsan aşağıdaki koduda incele senin için faydalı olabilir.

Kod: Tümünü seç


uses comobj;

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
var
 EXCEL, WORKBOOK, SHEET:VARIANT;
begin

EXCEL := CREATEOLEOBJECT('EXCEL.APPLICATION');{EXCEL 'İ AÇMA}
EXCEL.VISIBLE :=TRUE;{EXCEL 'İ AKTİF YAPMA}
WORKBOOK :=EXCEL.WORKBOOKS.ADD;{KİTAP EKLEME}

 SHEET:=WORKBOOK.WORKSHEETS[1];{SAYFA NUMARASI}
 SHEET.CELLS[1,1]:= 'DENEME METİN'; {SATIR,SÜTUN} //Buradan Satır ve Sütunlara erişebilirsin.

 SHEET.CELLS[1,1].Font.Color     := $00E88017;
 SHEET.CELLS[1,1].Font.Bold      := True;
 SHEET.CELLS[1,1].Font.italic    := True;
 SHEET.CELLS[1,1].Font.Underline := true;
 SHEET.CELLS[1,1].Font.Size      := 20;
 SHEET.CELLS[1,1].Characters(3, 1).Font.Bold := True; {HÜCRE İÇİNDE BİR ARALIKDAKİ METNE HİTAP ETME}

 SHEET.RANGE['A1:A10'].Borders.Color := $00E88017; {aralıktaki bütün hücrelerin dört kenarını renklendirir}
 SHEET.CELLS[1,10].Borders.LineStyle := xlContinuous; {BİR HÜCREYE HİTAP ETME}
 SHEET.RANGE['A1:A10'].Borders.LineStyle := xlContinuous;{BELİRLİ BİR ARALIĞA HİTAP ETME}
 {XlLineStyle -> xlContinuous, xlDash, xlDashDot, xlDashDotDot, xlDot, xlDouble, xlSlantDashDot, or xlLineStyleNone.}


 {BİR HÜCRENİN HERHANGİ BİR KENARLIĞININ RENGİNİ BELİRLEME}
 {Tipler: xlInsideHorizontal, xlInsideVertical, xlDiagonalDown, xlDiagonalUp, xlEdgeBottom, xlEdgeLeft, xlEdgeRight, or xlEdgeTop.}
 SHEET.RANGE['B1:F2'].Borders(xlEdgeTop).Color := 00E88017;

 {istenilen yern sütun rengini belirleme}
 SHEET.RANGE['B1:F2'].Interior.Color := 00E88017;
 SHEET.RANGE['B1:F2'].Interior.ColorIndex := 1;  {ColorIndex index kulalnınca her rengin bir kodu var kökde bunları yazmım}

 SHEET.Range['A1:H8'].Formula := '=rand()';

 SHEET.Range('A1').ClearContents; {İSTENİLEN HÜCRELERİ TEMİZLEME}

 {SATIR SÜTUN LARA HİTAP ETME}
 SHEET.Range['A1'].Columns.ColumnWidth := 20;{sadece belirtilen hücreyi}
 SHEET.Range['A1'].Rows.RowHeight := 20;

 SHEET.Columns.ColumnWidth := 25; {tüm sayfada etkili}
 SHEET.Rows.RowHeight := 25;

 SHEET.Columns(1).Font.Bold := True;
 SHEET.Rows(1).Font.Bold    := True;

 SHEET.Columns(1).Delete;
 SHEET.Rows(3).Delete;
end;
Kolay Gelsin...

Gazete manşetleri
* DİKKAT :Lütfen forum kurallarını okuyalım ve uyalım...!
* Warez,crack vs. paylaşımı kesinlikle yasaktır.
Kullanıcı avatarı
husonet
Admin
Mesajlar: 2962
Kayıt: 25 Haz 2003 02:14
Konum: İstanbul
İletişim:

Mesaj gönderen husonet »

Senin soruna aşağıda yazdığım kod care olabilir.

Kod: Tümünü seç


procedure TForm1.Button1Click(Sender: TObject);
var
excelPrg,sayfa:variant;
i,d:integer;
r:variant;

begin
  excelPrg:=createoleobject('excel.application');//exceli yarat
  excelPrg.workbooks.add;
  sayfa:=excelPrg.workbooks[1].worksheets[1];{Birinci calisma sayfasini sayfa degiskenine ata}
  r:=excelPrg.activeworkbook.worksheets[1].cells[1]; // Burası Çok önemli
  i:=0;
  d:=0;
  while Not Table1.eof do
  begin
     i:=i+1;
     d:=d+1;
     r.cells[1+d,i]:=Table1.FieldByName('NAME').AsString;
     r.cells[1+d,i+1]:=Table1.FieldByName('SIZE').AsString;
     Table1.Next;
     i:=0;
  end;
  excelPrg.visible:=true;//Exceli acip verileri
end;


Kolay Gelsin...

Gazete manşetleri
* DİKKAT :Lütfen forum kurallarını okuyalım ve uyalım...!
* Warez,crack vs. paylaşımı kesinlikle yasaktır.
meguntr
Üye
Mesajlar: 78
Kayıt: 23 Eki 2003 02:09

Mesaj gönderen meguntr »

merhabalar, yardımlarınız için teşekkürler, yazdığınız kodlar işimi gördü yanlız naile hocam 'ın gönderdiği kodun son satırındaki,
IExcel.Disconnect; kodunu yazdıgımda programı kapatırken bellek okunamadı mesajı veriyor..
ben programımda varalon bir excel dosyasındaki verilerin üstüne devamlı yeni veriler aktarmak istiyorum...
IExcel.Disconnect; kodunu sildiğimde ise şöyle bir sorun var program ilk seferinde doğru aktarıyor..programı kapatmadan database de bir kayıt değiştirim tekrar aktarmak istediğimde , excel programı açılmıyor, aslında arka planda açılıyor ama visible 'ı false gibi bir şey oluyor ve ve görev yöneticisinde çalışan işlemlerde 2-3 ve daha fazla excel.exe programı gözüküyor.. disconnect ve visible işlemlerini nasıl bir şekilde kullanırsam sorun çözülür

kolay gelsin
Kullanıcı avatarı
naile
Admin
Mesajlar: 1873
Kayıt: 11 Haz 2003 10:11

Mesaj gönderen naile »

Evet o disconnect olmazsa 2.sefer excel dosyası açmak istediğinde visible false oluyor. Ama ben de hiç hata vermiyor :roll:
Benim kodu aynen mi yazdın? Kodunu yazarsan belki görebilirim hata nedenini.
meguntr
Üye
Mesajlar: 78
Kayıt: 23 Eki 2003 02:09

Mesaj gönderen meguntr »

unit Excel;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, OleServer, Excel2000, StdCtrls, DB, DBTables, Grids, DBGrids,
ExtCtrls, DBCtrls, Mask, OleCtnrs;

type
TForm1 = class(TForm)
Button1: TButton;
Table1: TTable;
IExcel: TExcelApplication;
rapor_grid: TDBGrid;
DataSource1: TDataSource;
Table1Adi: TStringField;
Table1SOYADI: TStringField;
Table1NO: TFloatField;
Table1TEL: TFloatField;
Table1SEHIR: TStringField;
Table1ULKE: TStringField;
Label1: TLabel;
DBEdit1: TDBEdit;
Label2: TLabel;
DBEdit2: TDBEdit;
Label3: TLabel;
DBEdit3: TDBEdit;
Label4: TLabel;
DBEdit4: TDBEdit;
Label5: TLabel;
DBEdit5: TDBEdit;
Label6: TLabel;
DBEdit6: TDBEdit;
DBNavigator1: TDBNavigator;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
IRange:Excel2000.ExcelRange;
I,Row,sayac:integer;
Bookmark:TBookmark;
implementation
uses comOBJ;
{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
index:OleVariant;
Dosya:Widestring;
begin
Dosya:= 'C:\deneme.xls';
index := 1;
IExcel.WorkBooks.Open(Dosya,EmptyParam,False,EmptyParam,EmptyParam, EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,0);

///alan verilerini izleyen satırlara ekle
Table1.DisableControls;
try
Bookmark:=Table1.GetBookmark;
try
Table1.First;
///SAtırları seç
Row:=2;
While not Table1.EOF do
begin
// Sutunları seç
IRange:=IExcel.Range ['A'+inttostr(Row),'A'+inttostr(Row)];
For I:=0 to Table1.Fields.Count-1 do
begin
IRange.Value:=Table1.Fields.AsString;
IRange:=IRange.Next;
end;
Table1.Next;
Inc(Row);
end;
Finally
Table1.GotoBookmark(Bookmark);
Table1.FreeBookmark(Bookmark);
end;
finally
Table1.EnableControls;
end;
//Kısmı formatla
IRange:=IExcel.Range['A1','F'+inttostr(Row-1)];
IRange.AutoFormat(1,NULL,NULL,NULL,NULL,NULL,NULL);

IExcel.Visible[0]:=True;
IExcel.Disconnect;
end;
end.

Bu şekilde; Açılan Excel dosyasını kapatmak istediğimde 0X650918D8 bellek adresine başvurdu.Bellek, Read olamadı mesajı veriyor
Kullanıcı avatarı
naile
Admin
Mesajlar: 1873
Kayıt: 11 Haz 2003 10:11

Mesaj gönderen naile »

IExcel.WorkBooks.Open(Dosya,EmptyParam,False,EmptyParam,EmptyParam, EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,0);


in üstüne

IExcel.Connect;

yazarsan hata vermez sanırım.
meguntr
Üye
Mesajlar: 78
Kayıt: 23 Eki 2003 02:09

Mesaj gönderen meguntr »

Dediğiniz gibi connect kodunu ekledim ama yine aynı hatayı veriyor
ilginize teşşekür ederim

kolay gelsin
hatice_sevim
Üye
Mesajlar: 50
Kayıt: 17 Haz 2003 09:00
Konum: İstanbul

Mesaj gönderen hatice_sevim »

Kod: Tümünü seç

uses
  ...  ,ComObj;
var
  v,sayfa : variant;{v excel prg, sayfa calisma sayfasi}
  ii, adet, sayi, satir : integer;
implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  i : integer;
begin
  v:=createoleobject('excel.application'); //exceli yarat
  v.workbooks.open('c:\iptal_iade_tablosu.xls');  //yeni calisma kitabini ekle
  sayfa:=v.workbooks[1].worksheets[1]; // 2. worksheets için de aynı

  Query1.Close;
  Query1.SQL.Clear;
  Query1.SQL.Add('select * from table_name');
  Query1.Open;

  Query1.First;

  for i := 1 to query1.RecordCount do
  begin
      sayfa.cells[(i+8),3] := query1.Fields[1].AsInteger;
      sayfa.cells[(i+8),4] := query1.Fields[2].Asfloat;

//      sayfa.cells[(i+8),4] := table1.fieldsbyname(toplam).asfloat; şeklindede olabilir.

  query1.Next;
  end; //   for i := 1 to query1.RecordCount do

  v.quit;
end;

Şeklinde çalışan bir uygulama ile query den istediğim bilgileri excel tablosuna alabiliyorum. :D

Umarım sizinde işinizi görür
Kolay gelsin.
Hatice SEVİM / BEDAŞ
Kullanıcı avatarı
naile
Admin
Mesajlar: 1873
Kayıt: 11 Haz 2003 10:11

Mesaj gönderen naile »

Allah Allah :roll:
Bir de istersen Hatice'nin kodunu bir dene, sonucu yaz, olmazsa tekrar bakalım.

Kolay gelsin.
meguntr
Üye
Mesajlar: 78
Kayıt: 23 Eki 2003 02:09

Mesaj gönderen meguntr »

:( Teşekkürler arkadaşlar, Hatice hanımın kodunu denediğimde de aynı şeyi yapıyor, yani sorunu hala çözemedim, bende aktarma işlemi bittiğinde programı kapatıyorum,sonra yeniden çalıştırıyorum böyle geçmek zorunda kaldım.. sorunu çözebilirsem sizlere iletirim...
Herşey için Teşekkürler

Kolay Gelsin
Kullanıcı avatarı
naile
Admin
Mesajlar: 1873
Kayıt: 11 Haz 2003 10:11

Mesaj gönderen naile »

:(

Satır satır ilerleyerek hangi satırda hata verdiğine baktın mı?
unforgiven
Üye
Mesajlar: 75
Kayıt: 19 Eyl 2003 09:50
Konum: ANKARA

excell veri aktarımı

Mesaj gönderen unforgiven »

ben burada bulunan kodları kullandım fakat varolan bir dosyayı ('ornek.xls') actıgı zaman salt okunur olarak acıyor ve kayır yapmıyor.
Kullanıcı avatarı
naile
Admin
Mesajlar: 1873
Kayıt: 11 Haz 2003 10:11

Mesaj gönderen naile »

Dosyanın kendisi salt okunur olabilir veya xp kullanıyorsan oturumu açtığın kullanıcıdan dolayı sorun çıkıyor oalbilir ben burda gönderdiğim kodu kendim kullanıyorum varolan bir dosyayı açıp bu kodla içine bilgi yazabiliyorum.
Cevapla