نقل البيانات من dbgrid إلى Excel
#1
كيف يمكنني نقل البانات من قاعدة بيانات إلى Excel ؟

قبل كل شيء كيف نتصل بالبرنامج EXcel

بكل بساطة عبر المكون TExcelApplication الموجود في الطرف Servers أو Serveurs (النسخة الفرنسية)

خلال عملنا سيكون لدينا
كود :
Table1: TTable;
DataSource1: TDataSource;
DBGird1: TDBGrid;
ExcelApplication1: TExcelApplication

السطرين الأتيين يضافان برمجيا
كود :
Tab: _workbook;
Fuil: _worksheet


وللعلم خانات Excel تدعى [ Range[ i, j حيث i و j عبارة عن مكان الخانة مثل A1، b3

تملء بواسطة دلفي :
كود :
Feuil.Range[A1,A1].Value[xlRangeValueDefault] :='Text to insert';
xlRangeValueDefault : (عبارة عن RangeValueDataType التي تعبر عن نوع المعطيات) ترجع Empty إذا كانت الخانة المعنية فارغة، وإذا Range أخذت أكثر من خانة فيرجع جدول من القيم.
راجع موقع ميكروسوفت
كود :
http://msdn2.microsoft.com/fr-fr/library/microsoft.office.tools.excel.namedrange.value(VS.80).aspx

أولا من DBGrid :

للعمل مع DBGrid يجب أن ننتبه إلى أمرين عنوان و المحتوى

نبدا بالعنوان :
لكي أستطيع استعمال حلقة (لأن كمية المعلومات غير معلومة) سأستعمل جدول يحتوي على الحروف من A حتى Z

كود :
var
  Form1: TForm1;
  
  a:array [1..26]of string[1]=('A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','u','V','W','X','Y','Z');

لا ننسى أن نتصل بالبرنامج Excel

كود :
var Tab: _workbook;
    Feuil: _worksheet;
    i,j:Integer; //تسعمل لاحقا j
S:shortstring;//أيضا سنراها لاحقا

begin
ExcelApplication1.Connect;
ExcelApplication1.Visible[0]:=False;
Tab:=ExcelApplication1.Workbooks.Add(xlWBATWorksheet,0);
ExcelApplication1.Visible[0]:=true;
feuil:=Tab.Worksheets[1] as _worksheet;

بعدها نقوم بالآتي:
كود :
For i:=0 to DBGrid1.Columns.Count-1 do begin
  with Feuil.Range[A[i+1]+'1',A[i+1]+'1'] do begin
  Value[xlRangeValueDefault]:= DBGrid1.Columns.Items[i].Title.Caption;

//في مايلي عبارة عن تلوين الخانات وتغيير الخط ...
  Font.Name:='times new roman';
  Font.Size:=10;
  Font.Bold:=True;
   With Interior do begin
        ColorIndex := 15;
        Pattern := xlSolid;
        PatternColorIndex := xlAutomatic;
    End;
  With Borders do begin
        LineStyle := xlContinuous;
        Weight := xlThin;
        ColorIndex := xlAutomatic;
    End;
    end;
end;

الآن ننتقل إلى محتوى DBGrid :


كود :
j:=2;
// نوقف إظهار التغييرات و الانتقالات
TableTemp.DisableControls;
Table1.First;
While not Table1.Eof do begin
  For i:= 1 To  DBGrid1.Columns.Count Do
   begin
   s:=A[i]+inttostr(j);
   Feuil.Range[s,s].Value[xlRangeValueDefault] :=DBGrid1.Fields[i-1].AsString;
   end;
   Table1.Next;
   j:=j+1;
  end;

إذا لاحظت لقد أظهرنا ملف Excel قبل العملية ExcelApplication1.Visible[0]:=true

أي سترى الجدول يمتلء بالبيانات ، أما إذا أردت إخفاء عملية الملء عن المستعمل فقط لا تستدعي الإظهار قبل الانتهاء.

الآن لم يبقى أي شيء مهم، فقط إذا أردت تعديل الخطوط والمساحة

مثلا عند انتهاء العملية سنقوم بالتعديل على طول الخانات للتتناسب و المحتوى

كود :
ExcelApplication1.Cells.Select;
    ExcelApplication1.Columns.AutoFit;
    ExcelApplication1.Range['A1','A1'].Select;

ثم إغلاق الإتصال مع الملف
كود :
ExcelApplication1.Disconnect


ثانيا مباشرة من قاعدة البيانات:

هنا ليس لدينا عناوين وإنما أسماء الحقول

كود :
For i:=0 to Table1.FieldCount-1 do begin
  with Feuil.Range[A[i+1]+'1',A[i+1]+'1'] do begin
   Value[xlRangeValueDefault]:= Table1.Fields.Fields[i].FieldName;   // الخانة تأخذ اسم الحقل
  Font.Name:='times new roman';
  Font.Size:=10;
  Font.Bold:=True;
   With Interior do begin
        ColorIndex := 15;
        Pattern := xlSolid;
        PatternColorIndex := xlAutomatic;
    End;
  With Borders do begin
        LineStyle := xlContinuous;
        Weight := xlThin;
        ColorIndex := xlAutomatic;
    End;
    end;
end;

أما بالنسبة للمحتوى فنقوم بالأتي:

كود :
j:=2;
  Table1.First;
While not Table1.Eof do begin
  For i:= 1 To  Table1.FieldCount Do
   begin
   s:=A[i]+inttostr(j);
   Feuil.Range[s,s].Value[xlRangeValueDefault] :=Table1.Fields.Fields[i-1].AsString;
   end;
   Table1.Next;
   j:=j+1;
  end;

أما الباقي فلا يتغير

لإتمام الفهم أرفقت الملف

ملاحظة : لرؤية الفرق بين العمليتين جرب فقط قاعدة البيانات المرفقة

تحياتي Smile[/COLOR]


الملفات المرفقة
.zip   DB_To_Excel.zip (الحجم : 2.76 ك ب / التحميلات : 2,749)
الرد


الردود في هذا الموضوع
نقل البيانات من dbgrid إلى Excel - بواسطة merouane - 11-04-2008, 10:30 PM
نقل البيانات من dbgrid إلى Excel - بواسطة سوالف - 12-04-2008, 11:31 PM
نقل البيانات من dbgrid إلى Excel - بواسطة merouane - 13-04-2008, 02:12 AM
نقل البيانات من dbgrid إلى Excel - بواسطة kachwahed - 01-03-2011, 05:41 PM
نقل البيانات من dbgrid إلى Excel - بواسطة kachwahed - 02-03-2011, 04:08 PM
نقل البيانات من dbgrid إلى Excel - بواسطة mourad123 - 04-03-2011, 09:12 AM
نقل البيانات من dbgrid إلى Excel - بواسطة mourad123 - 04-03-2011, 09:47 AM
نقل البيانات من dbgrid إلى Excel - بواسطة garrab - 19-11-2011, 10:50 AM
نقل البيانات من dbgrid إلى Excel - بواسطة suhil76 - 29-06-2012, 01:39 PM
نقل البيانات من dbgrid إلى Excel - بواسطة tadjou - 07-07-2012, 12:30 AM
نقل البيانات من dbgrid إلى Excel - بواسطة tadjou - 07-07-2012, 12:33 AM
نقل البيانات من dbgrid إلى Excel - بواسطة fethi ts - 19-05-2015, 04:33 PM

التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم