سلام

می خوام یکی از مشکلاتی رو که خودم با هاش درگیر بودم و وقتی تویاینترنت براش جستجو زدم مورد بدرد بخوری رو هم ندیدم رو  برای استفاده دیگران بزارم.

سوال:

میخوایم از یه فایل اکسل با 8 ستون (هر ستون میتونه عدد و متن باشه بدلخواه)همه سطرها رو بخونیم و توی یه بانک اطلاعاتی در اکسس کپی کنیم؟

 


ایتدا توابع زیر رو فراخوانی می کنیم:

uses
OleServer, ExcelXP,ComObj, DBTables,
  ComCtrls,ADODB,ShellApi;

سپس :

private
     Xlapp,XlSheet : Variant;

حالا یه دکمه میخوایم ویه Open Dialog توی فرممون بزاریم وسپس دستورات زیر رو مینویسیم.

این برنامه تا پایان جدول اکسل و اولین جای خالی (Blank)میخونه و اون رو توی جدول با اسامی فیلدهای دلخواه کپی میکنه و در پایان در یک لیبل تعداد رو نشون میده.

نکته1: سطر اول اکسل معمولا عنوان ستون هست که اون رو نیاز نیست بخونه و انتقال بده.

نکته2: ستون دوم اکسل رو بدلخواه نمی خونیم!

امیدوارم بدردتون بخوره.

procedure TForm1.SpeedButton15Click(Sender: TObject);
var
RowCount : integer;
DayDate  : String;
begin
  if OpenDialog1.Execute Then
  Begin
    XlApp := CreateOleObject('Excel.Application');
    Try
       XlApp.Workbooks.Add(OpenDialog1.FileName);
       XlSheet := XlApp.WorkBooks[1].Sheets[1];
        DataModule2.Table1.Active:=False;
        DataModule2.Table1.EmptyTable;
        DataModule2.Table1.Active:=True;
     RowCount := 2;
   try
    While XlSheet.Range['H' + IntToStr(RowCount)].Value <> '' Do
      Begin
        Inc(RowCount);
        DataModule2.Table1.Insert;
        DataModule2.Table1mandehkol.Value:=XlSheet.Range['A' + IntToStr(RowCount)].Value;
        DataModule2.Table1Tedad.Value:=XlSheet.Range['C' + IntToStr(RowCount)].Value;
        DataModule2.Table1desc_hesab.Value:=XlSheet.Range['D' + IntToStr(RowCount)].Value;
        DataModule2.Table1zir_shakheh.Value:=XlSheet.Range['E' + IntToStr(RowCount)].Value;
        DataModule2.Table1Noe_Hesab.Value:=XlSheet.Range['F' + IntToStr(RowCount)].Value;
        DataModule2.Table1shobe_Name.Value:=XlSheet.Range['G' + IntToStr(RowCount)].Value;
        DataModule2.Table1shobe_Cod.Value:=XlSheet.Range['H' + IntToStr(RowCount)].Value;
        DataModule2.Table1.Post;

      End;//End While
   Except
   End;
     Label1.Caption:=IntToStr(RowCount)
    Except
       XlApp.Quit;
    End;
 End;

نظر یادتون نره!