11-04-2008, 10:30 PM
كيف يمكنني نقل البانات من قاعدة بيانات إلى Excel ؟
قبل كل شيء كيف نتصل بالبرنامج EXcel
بكل بساطة عبر المكون TExcelApplication الموجود في الطرف Servers أو Serveurs (النسخة الفرنسية)
خلال عملنا سيكون لدينا
السطرين الأتيين يضافان برمجيا
وللعلم خانات Excel تدعى [ Range[ i, j حيث i و j عبارة عن مكان الخانة مثل A1، b3
تملء بواسطة دلفي :
xlRangeValueDefault : (عبارة عن RangeValueDataType التي تعبر عن نوع المعطيات) ترجع Empty إذا كانت الخانة المعنية فارغة، وإذا Range أخذت أكثر من خانة فيرجع جدول من القيم.
راجع موقع ميكروسوفت
أولا من DBGrid :
للعمل مع DBGrid يجب أن ننتبه إلى أمرين عنوان و المحتوى
نبدا بالعنوان :
لكي أستطيع استعمال حلقة (لأن كمية المعلومات غير معلومة) سأستعمل جدول يحتوي على الحروف من A حتى Z
لا ننسى أن نتصل بالبرنامج Excel
بعدها نقوم بالآتي:
الآن ننتقل إلى محتوى DBGrid :
إذا لاحظت لقد أظهرنا ملف Excel قبل العملية ExcelApplication1.Visible[0]:=true
أي سترى الجدول يمتلء بالبيانات ، أما إذا أردت إخفاء عملية الملء عن المستعمل فقط لا تستدعي الإظهار قبل الانتهاء.
الآن لم يبقى أي شيء مهم، فقط إذا أردت تعديل الخطوط والمساحة
مثلا عند انتهاء العملية سنقوم بالتعديل على طول الخانات للتتناسب و المحتوى
ثم إغلاق الإتصال مع الملف
ثانيا مباشرة من قاعدة البيانات:
هنا ليس لدينا عناوين وإنما أسماء الحقول
أما بالنسبة للمحتوى فنقوم بالأتي:
أما الباقي فلا يتغير
لإتمام الفهم أرفقت الملف
ملاحظة : لرؤية الفرق بين العمليتين جرب فقط قاعدة البيانات المرفقة
تحياتي [/COLOR]
قبل كل شيء كيف نتصل بالبرنامج 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';
راجع موقع ميكروسوفت
كود :
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;
أما الباقي فلا يتغير
لإتمام الفهم أرفقت الملف
ملاحظة : لرؤية الفرق بين العمليتين جرب فقط قاعدة البيانات المرفقة
تحياتي [/COLOR]