03-10-12, 12:48 PM
[SIZE=3][COLOR="#0000CD"]
بسم الله الرحمن الرحيم
أخواني و أخواتي المبرمجين في هذا المنتدى الكريم، في سبيل إغناء المنتدى بالمواضيع الهامة التي تخص البرمجة، فإني أحب أن أكون واحداً من المساهمين و ذلك لرد بعض الفضل الذي تعلمته من أخواني الأعضاء في منتدى فيجوال بيسك، و أرجوا أن تتقبلوا مني هذه المشاركة.
هذا الدرس يختص بكيفية التعامل مع برنامج الإكسل، و أذكر أني قد تعلمت الكثير في هذا المجال من الأخوة الكبار Athman و أبوإيهاب و RamiLove.
لنفرض أن نريد عمل نموذج ملف إيكسل كالصورة المرفقة، فكيف تتم البرمجة للحصول على نفس النموذج.
[ATTACH=CONFIG]577[/ATTACH]
لنبدأ بمشيئة الله،
بعد فتح مشروع جديد و إضافة Form جديد، نقوم بإضافة جدول "DataGridView" و زر و عداد "Progress Bar" كما في الصورة، و نسمح في الجدول لخاصية الكتابة و الإضافة. ثم إضافة مكتبة الإكسيل Microsoft Excel 12.0 Object Library من Add Reference . و أخيراً انقر نقراً مزدوجاً على الزر لتفتح صفحة Code داخل حدث نقر الزر.
نقوم باستيراد المكتبات التالية التي تختص في التعامل مع MS Office في بداية الصفحة
[ATTACH=CONFIG]579[/ATTACH]
و في حدث نقر الزر نقوم بتعريف تطبيق برنامج الإكسيل، و ملف العمل Workbook و صفحة العمل Worksheet، و من ثم نبدأ بانشاء و فتح التطبيق، و إلحاق ملف العمل للتطبيق و أخيراً صفحة العمل إلى الملف.
بعد الإنتهاء من إعداد التطبيق، نبدأ بتصميم صفحة الإكسيل كما هو المطلوب كالآتي:
تحديد عرض الأعمدة و ذلك بالنقاط كما في برنامج الإكسيل و هي تختلف في القياس في الفيجوال بيسك:
اعداد العنوان و كما نلاحظ العنوان قد دمج الخلايا من A1 حتى B2 و ذلك باستخدام "Range". في هذه الخاصية سيتم عمل جميع الاعدادات التي تريدها في داخل الخلايا التي حددتها أنت حيث يشبه أمر التظليل.
لدمج الخلايا لتصبح كخلية واحدة نستخدم أمر Merge، لكتابة داخل الخلية المدمجة نستخدم أمر Value و نكتب المراد كتابته أو أن يأخذ النص من TextBox، لتحديد نوع الخط نستخدم Font.Name و نقوم بكتابة اسم الخط المراد، و لحجم الخط Font.Size، لجعل النص في يسار الخلية أفقياً نستخدم HorizontalAlignment، و في وسط الخلية رأسياً نستخدم VerticalAlignmen، لجعل النص بخط عريض نستخدم Font.Bold، و أخيراً لون الخط فنستخدم فهرس ألوان ال Office و هو تحديد اللون بالأرقام و يوجد ملف مرفق بهذا الفهرس.
الكود التالي لكتابة عناوين الأعمدة
لإعداد عرض المحتوى داخل الخلية كالرقم من غير أي فواصل نكتب التالي:
و لعرض التاريخ بهيئة معينة نكتب التالي:
و لعمل إعدادات قوائم الأعمدة
الجديد هنا لون خلفية الخلية التي استخدمنا لها أمر Interior.ColorIndex
في الكود التالي يتم تحديد مكان المحتوى أفقياً في داخل العمود في الكامل:
حيث يبدأ ادخال البيانات و المحتويات من البرنامج إلى الإكسيل و كما في الشكل المطلوب لدينا يبدأ من A5 حتى العدد الذي نحدده، و هنا حددنا عدد صفوف محتوى DataGridView زائد 3، لماذا زائد 3؟
الجواب أننا بدأنا بملئ الإكسيل من صف رقم 4 للأسماء العناوين من صف 5 للبيانات القادمة من البرنامج، و لنحسب كم صف تركنا قبل الجدول سنجده 3، و بهذه نزيد 3 على أعدد صفوف DataGridView، و نفس الشيء نقوم بعمله لمكان المحتوى رأسياً
الكود التالي لرسم حدود الجدول و ذلك أفقياً و رأسياً و من فوق و تحت و يمين و شمال
لكتابة معادلة في خلية معينة كمعادلة متوسط قيمة عمود ID و ذلك باستخدام Formula
و قبل أن ننتهي نبدأ بملئ البيانات و ذلك بحلقة For حيث سيبدأ بملئ الخلايا من الصف الخامس و حتى رقم صفوف DataGridView ناقص 2 لأن DataGridView يقبل بإضافة بيانات أما في حالة تحميل المعلومات إلى DataGridView من DataSet فيكون ناقص 1.
لفتح ملف الإكسيل
الكود بالكامل
تم الدرس بعون الله ولأي استفسارات أنا جاهز بإذن الله.
[/COLOR][/SIZE]
بسم الله الرحمن الرحيم
أخواني و أخواتي المبرمجين في هذا المنتدى الكريم، في سبيل إغناء المنتدى بالمواضيع الهامة التي تخص البرمجة، فإني أحب أن أكون واحداً من المساهمين و ذلك لرد بعض الفضل الذي تعلمته من أخواني الأعضاء في منتدى فيجوال بيسك، و أرجوا أن تتقبلوا مني هذه المشاركة.
هذا الدرس يختص بكيفية التعامل مع برنامج الإكسل، و أذكر أني قد تعلمت الكثير في هذا المجال من الأخوة الكبار Athman و أبوإيهاب و RamiLove.
لنفرض أن نريد عمل نموذج ملف إيكسل كالصورة المرفقة، فكيف تتم البرمجة للحصول على نفس النموذج.
[ATTACH=CONFIG]577[/ATTACH]
لنبدأ بمشيئة الله،
بعد فتح مشروع جديد و إضافة Form جديد، نقوم بإضافة جدول "DataGridView" و زر و عداد "Progress Bar" كما في الصورة، و نسمح في الجدول لخاصية الكتابة و الإضافة. ثم إضافة مكتبة الإكسيل Microsoft Excel 12.0 Object Library من Add Reference . و أخيراً انقر نقراً مزدوجاً على الزر لتفتح صفحة Code داخل حدث نقر الزر.
نقوم باستيراد المكتبات التالية التي تختص في التعامل مع MS Office في بداية الصفحة
[ATTACH=CONFIG]579[/ATTACH]
PHP كود :
Imports Microsoft.Office.Interop
Imports Microsoft.Office.Core
و في حدث نقر الزر نقوم بتعريف تطبيق برنامج الإكسيل، و ملف العمل Workbook و صفحة العمل Worksheet، و من ثم نبدأ بانشاء و فتح التطبيق، و إلحاق ملف العمل للتطبيق و أخيراً صفحة العمل إلى الملف.
PHP كود :
Dim exl_app As New Excel.Application
Dim exl_wrk As Excel.Workbook
Dim exl_wst As Excel.Worksheet
exl_app = CreateObject("Excel.Application")
exl_wrk = exl_app.Workbooks.Add
exl_wst = exl_wrk.Worksheets(1)
بعد الإنتهاء من إعداد التطبيق، نبدأ بتصميم صفحة الإكسيل كما هو المطلوب كالآتي:
تحديد عرض الأعمدة و ذلك بالنقاط كما في برنامج الإكسيل و هي تختلف في القياس في الفيجوال بيسك:
PHP كود :
With exl_wst
.Columns("A").columnwidth = 10
.Columns("B").ColumnWidth = 30
.Columns("C").columnWidth = 15
.Columns("D").columnwidth = 15
.Columns("E").columnwidth = 15
End With
اعداد العنوان و كما نلاحظ العنوان قد دمج الخلايا من A1 حتى B2 و ذلك باستخدام "Range". في هذه الخاصية سيتم عمل جميع الاعدادات التي تريدها في داخل الخلايا التي حددتها أنت حيث يشبه أمر التظليل.
PHP كود :
With exl_wst.Range("A1:B2")
.Merge()
.Value = "ABC School"
.Font.Name = "Times New Roman"
.Font.Size = 30
.HorizontalAlignment = Excel.XlHAlign.xlHAlignLeft
.VerticalAlignment = Excel.XlVAlign.xlVAlignCenter
.Font.Bold = True
.Font.ColorIndex = 41
End With
لدمج الخلايا لتصبح كخلية واحدة نستخدم أمر Merge، لكتابة داخل الخلية المدمجة نستخدم أمر Value و نكتب المراد كتابته أو أن يأخذ النص من TextBox، لتحديد نوع الخط نستخدم Font.Name و نقوم بكتابة اسم الخط المراد، و لحجم الخط Font.Size، لجعل النص في يسار الخلية أفقياً نستخدم HorizontalAlignment، و في وسط الخلية رأسياً نستخدم VerticalAlignmen، لجعل النص بخط عريض نستخدم Font.Bold، و أخيراً لون الخط فنستخدم فهرس ألوان ال Office و هو تحديد اللون بالأرقام و يوجد ملف مرفق بهذا الفهرس.
الكود التالي لكتابة عناوين الأعمدة
PHP كود :
With exl_wst
.Range("A4").Value = "ID"
.Range("B4").Value = "Student Name"
.Range("C4").Value = "Grade"
.Range("D4").Value = "Date of Birth"
.Range("E4").Value = "Contacts"
End With
لإعداد عرض المحتوى داخل الخلية كالرقم من غير أي فواصل نكتب التالي:
PHP كود :
exl_wst.Columns("A").NumberFormat = "0"
PHP كود :
exl_wst.Columns("D").NumberFormat = "dd/MM/yyyy"
و لعمل إعدادات قوائم الأعمدة
PHP كود :
With exl_wst.Range("A4:E4")
.Font.Bold = True
.VerticalAlignment = Excel.XlVAlign.xlVAlignCenter
.HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter
.Font.ColorIndex = 1
.Interior.ColorIndex = 46
End With
الجديد هنا لون خلفية الخلية التي استخدمنا لها أمر Interior.ColorIndex
في الكود التالي يتم تحديد مكان المحتوى أفقياً في داخل العمود في الكامل:
PHP كود :
exl_wst.Range("a5:a" & dg.RowCount + 3).HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter
exl_wst.Range("b5:b" & dg.RowCount + 3).HorizontalAlignment = Excel.XlHAlign.xlHAlignLeft
exl_wst.Range("c5:c" & dg.RowCount + 3).HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter
exl_wst.Range("d5:d" & dg.RowCount + 3).HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter
exl_wst.Range("e5:e" & dg.RowCount + 3).HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter
حيث يبدأ ادخال البيانات و المحتويات من البرنامج إلى الإكسيل و كما في الشكل المطلوب لدينا يبدأ من A5 حتى العدد الذي نحدده، و هنا حددنا عدد صفوف محتوى DataGridView زائد 3، لماذا زائد 3؟
الجواب أننا بدأنا بملئ الإكسيل من صف رقم 4 للأسماء العناوين من صف 5 للبيانات القادمة من البرنامج، و لنحسب كم صف تركنا قبل الجدول سنجده 3، و بهذه نزيد 3 على أعدد صفوف DataGridView، و نفس الشيء نقوم بعمله لمكان المحتوى رأسياً
PHP كود :
exl_wst.Range("a5:e" & dg.RowCount + 3).VerticalAlignment = Excel.XlVAlign.xlVAlignCenter
الكود التالي لرسم حدود الجدول و ذلك أفقياً و رأسياً و من فوق و تحت و يمين و شمال
PHP كود :
exl_wst.Range("a4:e" & dg.RowCount + 3).Borders(Excel.XlBordersIndex.xlInsideHorizontal).LineStyle = Excel.XlLineStyle.xlContinuous
exl_wst.Range("a4:e" & dg.RowCount + 3).Borders(Excel.XlBordersIndex.xlInsideVertical).LineStyle = Excel.XlLineStyle.xlContinuous
exl_wst.Range("a4:e" & dg.RowCount + 3).Borders(Excel.XlBordersIndex.xlEdgeTop).LineStyle = Excel.XlLineStyle.xlContinuous
exl_wst.Range("a4:e" & dg.RowCount + 3).Borders(Excel.XlBordersIndex.xlEdgeBottom).LineStyle = Excel.XlLineStyle.xlContinuous
exl_wst.Range("a4:e" & dg.RowCount + 3).Borders(Excel.XlBordersIndex.xlEdgeLeft).LineStyle = Excel.XlLineStyle.xlContinuous
exl_wst.Range("a4:e" & dg.RowCount + 3).Borders(Excel.XlBordersIndex.xlEdgeRight).LineStyle = Excel.XlLineStyle.xlContinuous
لكتابة معادلة في خلية معينة كمعادلة متوسط قيمة عمود ID و ذلك باستخدام Formula
PHP كود :
.Formula = "=Average(a5:a" & dg.RowCount + 3 & ")"
و قبل أن ننتهي نبدأ بملئ البيانات و ذلك بحلقة For حيث سيبدأ بملئ الخلايا من الصف الخامس و حتى رقم صفوف DataGridView ناقص 2 لأن DataGridView يقبل بإضافة بيانات أما في حالة تحميل المعلومات إلى DataGridView من DataSet فيكون ناقص 1.
PHP كود :
For i = 0 To dg.RowCount - 2
For j = 0 To dg.ColumnCount - 1
exl_wst.Cells(i + 5, j + 1).Value = dg.Rows(i).Cells(j).Value
Next
Application.DoEvents()
Next
لفتح ملف الإكسيل
PHP كود :
exl_app.Visible = True
الكود بالكامل
PHP كود :
Imports Microsoft.Office.Interop
Imports Microsoft.Office.Core
Public Class Form1
Private Sub bt_exl_Click(sender As System.Object, e As System.EventArgs) Handles bt_exl.Click
Try
Dim exl_app As New Excel.Application
Dim exl_wrk As Excel.Workbook
Dim exl_wst As Excel.Worksheet
'Create excel object (file)
exl_app = CreateObject("Excel.Application")
exl_wrk = exl_app.Workbooks.Add
exl_wst = exl_wrk.Worksheets(1)
'set the columns width
With exl_wst
.Columns("A").columnwidth = 10
.Columns("B").ColumnWidth = 30
.Columns("C").columnWidth = 15
.Columns("D").columnwidth = 15
.Columns("E").columnwidth = 15
End With
With exl_wst.Range("A1:B2")
.Merge()
.Value = "ABC School"
.Font.Name = "Times New Roman"
.Font.Size = 30
.HorizontalAlignment = Excel.XlHAlign.xlHAlignLeft
.VerticalAlignment = Excel.XlVAlign.xlVAlignCenter
.Font.Bold = True
.Font.ColorIndex = 41
End With
'set the columns head title
With exl_wst
.Range("A4").Value = "ID"
.Range("B4").Value = "Student Name"
.Range("C4").Value = "Grade"
.Range("D4").Value = "Date of Birth"
.Range("E4").Value = "Contacts"
End With
exl_wst.Columns("A").NumberFormat = "0"
exl_wst.Columns("D").NumberFormat = "dd/MM/yyyy"
exl_wst.Columns("E").NumberFormat = "0"
'set the head title format
With exl_wst.Range("A4:E4")
.Font.Bold = True
.VerticalAlignment = Excel.XlVAlign.xlVAlignCenter
.HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter
.Font.ColorIndex = 1
.Interior.ColorIndex = 46
End With
'set the horizontal align for the table
exl_wst.Range("a5:a" & dg.RowCount + 3).HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter
exl_wst.Range("b5:b" & dg.RowCount + 3).HorizontalAlignment = Excel.XlHAlign.xlHAlignLeft
exl_wst.Range("c5:c" & dg.RowCount + 3).HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter
exl_wst.Range("d5:d" & dg.RowCount + 3).HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter
exl_wst.Range("e5:e" & dg.RowCount + 3).HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter
'set the align vertical for the table
exl_wst.Range("a5:e" & dg.RowCount + 3).VerticalAlignment = Excel.XlVAlign.xlVAlignCenter
'set the table border
exl_wst.Range("a4:e" & dg.RowCount + 3).Borders(Excel.XlBordersIndex.xlInsideHorizontal).LineStyle = Excel.XlLineStyle.xlContinuous
exl_wst.Range("a4:e" & dg.RowCount + 3).Borders(Excel.XlBordersIndex.xlInsideVertical).LineStyle = Excel.XlLineStyle.xlContinuous
exl_wst.Range("a4:e" & dg.RowCount + 3).Borders(Excel.XlBordersIndex.xlEdgeTop).LineStyle = Excel.XlLineStyle.xlContinuous
exl_wst.Range("a4:e" & dg.RowCount + 3).Borders(Excel.XlBordersIndex.xlEdgeBottom).LineStyle = Excel.XlLineStyle.xlContinuous
exl_wst.Range("a4:e" & dg.RowCount + 3).Borders(Excel.XlBordersIndex.xlEdgeLeft).LineStyle = Excel.XlLineStyle.xlContinuous
exl_wst.Range("a4:e" & dg.RowCount + 3).Borders(Excel.XlBordersIndex.xlEdgeRight).LineStyle = Excel.XlLineStyle.xlContinuous
pb_exl.Visible = True
pb_exl.Value = 0
pb_exl.Maximum = dg.RowCount - 1
pb_exl.Step = 1
'Calculate the average
With exl_wst.Range("a" & dg.RowCount + 5)
.Formula = "=Average(a5:a" & dg.RowCount + 3 & ")"
.VerticalAlignment = Excel.XlVAlign.xlVAlignCenter
.HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter
.Font.Bold = True
.Font.ColorIndex = 30
End With
'send the data from datagrid to excel
For i = 0 To dg.RowCount - 2
For j = 0 To dg.ColumnCount - 1
exl_wst.Cells(i + 5, j + 1).Value = dg.Rows(i).Cells(j).Value
Next
Application.DoEvents()
pb_exl.PerformStep()
Next
'show the excel file
exl_app.Visible = True
pb_exl.Visible = False
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub
End Class
تم الدرس بعون الله ولأي استفسارات أنا جاهز بإذن الله.