"
ARKADAŞLAR BU KODU ÇALIŞTIRAMADIM ... BU KOD HAKKINDA YARDIMCI OLABİLİRSENİZ SEVİNİRİM.
FORM ÜZERİNDE HANGİ NESNELER OLACAK VE HANGİ OLAYLARA KOD YAZILACAK ..
YARDIMLARINIZ İÇİN TEŞEKKÜRLER.
procedure TForm1.Import1Click(Sender: TObject);
Var
ExcelApplication1 : TExcelApplication;
ExcelWorkBook1 : TExcelWorkBook;
ExcelWorkSheet1 : TExcelWorkSheet;
lcid : Integer;
aExcelFile : OleVariant;
aFile: String;
aCurrLine : integer;
aCurrColumn : integer;
begin
od.Title:= 'Shipmentinfo ';
if od.Execute then
begin
aFile:= od.FileName; //Dosya Ismı buraya
ExcelApplication1:=TExcelApplication.Create( self );
ExcelWorkBook1:=TExcelWorkBook.Create( self );
ExcelWorkSheet1:=TExcelWorkSheet.Create( self );
ExcelApplication1.Connect;
lcid := 1033;//Sisteminizde yuklu msoffice'in default LCID ülke kodu.
ExcelApplication1.Visible[ lcid ] := False;
aExcelFile:=aFile;
ExcelWorkBook1.ConnectTo(ExcelApplication1.Workbooks.Add(aExcelFile, lcid));
ExcelWorkSheet1.ConnectTo(ExcelWorkBook1.Worksheets[1] as _Worksheet);
if DataModule1.Shipmentinfo.Active then
DataModule1.Shipmentinfo.Close;
DataModule1.Shipmentinfo.Open;
aCurrLine:= 2;
while VarToStr(ExcelWorkSheet1.Cells.Item[ aCurrLine, 1 ].Value) <> '' do
begin
DataModule1.Shipmentinfo.insert;
DataModule1.shipmentinfo.FieldByName('Week').AsString:= ExcelWorkSheet1.Cells.Item[ aCurrLine, 1 ].Value; //Excel sheet 'deki alanların dbgrid karşılığı
DataModule1.shipmentinfo.FieldByName('Trailer').AsString:= ExcelWorkSheet1.Cells.Item[ aCurrLine, 2 ].Value;
DataModule1.shipmentinfo.FieldByName('Shipment').AsString:= ExcelWorkSheet1.Cells.Item[ aCurrLine, 3 ].Value;
DataModule1.shipmentinfo.FieldByName('Customer').AsString:= ExcelWorkSheet1.Cells.Item[ aCurrLine, 4 ].Value;
DataModule1.shipmentinfo.FieldByName('Name').AsString:= ExcelWorkSheet1.Cells.Item[ aCurrLine, 5 ].Value;
DataModule1.shipmentinfo.FieldByName('Zipcode').AsString:= ExcelWorkSheet1.Cells.Item[ aCurrLine, 6 ].Value;
DataModule1.shipmentinfo.FieldByName('City').AsString:= ExcelWorkSheet1.Cells.Item[ aCurrLine, 7 ].Value;
DataModule1.shipmentinfo.FieldByName('Colli').AsString:= ExcelWorkSheet1.Cells.Item[ aCurrLine, 9 ].Value;
DataModule1.shipmentinfo.FieldByName('Country').AsString:= ExcelWorkSheet1.Cells.Item[ aCurrLine, 8 ].Value;
DataModule1.shipmentinfo.FieldByName('Weight').AsString:= ExcelWorkSheet1.Cells.Item[ aCurrLine, 10 ].Value;
DataModule1.shipmentinfo.FieldByName('Unit').AsString:= ExcelWorkSheet1.Cells.Item[ aCurrLine, 11 ].Value;
DataModule1.Shipmentinfo.Post;
Self.Refresh;
inc( aCurrLine );
end;
ExcelWorkSheet1.Columns.Autofit;
ExcelApplication1.Visible[lcid]:=true;
ExcelWorksheet1.disconnect;
ExcelWorkbook1.disconnect;
ExcelApplication1.disconnect;
End;
End;
"
merhaba,
arkadaşım, kodu nereye yazıcaz filan diyorsun, iyi güzel de,
birazcık kodu yorumlamaya çalışsan ?...
izah etmeye çalışayım,
form1 1 adet button koy ( captionu import olsun. ( dışardan al demiş arkadaş ) ,
1 adet adotable, 1 adet grid, 1 adet ado connection,1 adet datasource koy,
access de veri tabanı dosyasını oluştur dışardan, week, trailer, shipment. vs vs vs...
bak hepsi de metinselmiş zaten.
datamodule koymana gerek yok. gerekli bağlantıları yap sına vs!
import butonuna tıkladığında excel dosyasındaki bilgileri hücre hücre senin
kendi DB ne aktarıldığını görürsün.
kod gayet açık ve net. bu kodda önemli olan konu, EXCELden bilgilerin nasıl
çekilip alındığı. bak kodu yazan arkadaşımız exceldeki verileri çekip "insert" ile
kendi DBsine ne güzel ekletiyormuş bilgileri.
ya da daha da kısaltayım istersen:
1 button 3 tane memo yerleştir forma,
procedure TForm1.Button1Click(Sender: TObject);
Var
ExcelApplication1 : TExcelApplication;
ExcelWorkBook1 : TExcelWorkBook;
ExcelWorkSheet1 : TExcelWorkSheet;
lcid : Integer;
aExcelFile : OleVariant;
aFile: String;
aCurrLine : integer;
aCurrColumn : integer;
begin
od.Title:= 'Shipmentinfo ';
if od.Execute then
begin
aFile:= od.FileName; //Dosya Ismı buraya
ExcelApplication1:=TExcelApplication.Create( self );
ExcelWorkBook1:=TExcelWorkBook.Create( self );
ExcelWorkSheet1:=TExcelWorkSheet.Create( self );
ExcelApplication1.Connect;
lcid := 1033;//Sisteminizde yuklu msoffice'in default LCID ülke kodu.
ExcelApplication1.Visible[ lcid ] := False;
aExcelFile:=aFile;
ExcelWorkBook1.ConnectTo(ExcelApplication1.Workbooks.Add(aExcelFile, lcid));
ExcelWorkSheet1.ConnectTo(ExcelWorkBook1.Worksheets[1] as _Worksheet);
aCurrLine:= 2;
while VarToStr(ExcelWorkSheet1.Cells.Item[ aCurrLine, 1 ].Value) <> '' do
begin
memo1.lines.add(ExcelWorkSheet1.Cells.Item[ aCurrLine, 1 ].Value);
memo2.lines.add(ExcelWorkSheet1.Cells.Item[ aCurrLine, 2 ].Value);
memo3.lines.add(ExcelWorkSheet1.Cells.Item[ aCurrLine, 3 ].Value);
inc( aCurrLine );
end;
ExcelWorkSheet1.Columns.Autofit;
ExcelApplication1.Visible[lcid]:=true;
ExcelWorksheet1.disconnect;
ExcelWorkbook1.disconnect;
ExcelApplication1.disconnect;
End;
End;
excel kalıbı sabit, zaten yazılması gereken satırlar yazılmış. eksiği fazlası yok.
öğretici bir kod ayrıca.
yukardaki kod parçası da, excel dosyasındaki verileri ( od.filename olan )
satır sütunlardan okuyarak memo1-2-3 nesnelerinin içine aktaracak.
olay bu kadar basit.
tavsiye olarak,
stringgridden excele,
dbgridden excele,
excelden stringgride,
excelden dbgride,
aktarma işlemlerini yapan dinamik procedure kodlarının elinizde olması artı bir
avantajdır görüşündeyim. bu konular zevklidir hem :)
"excelden dbgride import" adlı kodu yayınlayan cüneyt arkadaşıma
buradan teşekkür ediyorum,
hepinize iyi çalışmalar, iyi günler, kolay gelsin.
"Türk Coderler her zaman zeki ve güçlüdür "
saygılarımla_
neoturk [ xxnt03@lycos.co.uk ]