تقييم الموضوع :
  • 1 أصوات - بمعدل 5
  • 1
  • 2
  • 3
  • 4
  • 5
كيف تتعامل مع برنامج الإكسيل من برنامجك
#1
[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]
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 ")" 

و قبل أن ننتهي نبدأ بملئ البيانات و ذلك بحلقة For حيث سيبدأ بملئ الخلايا من الصف الخامس و حتى رقم صفوف DataGridView ناقص 2 لأن DataGridView يقبل بإضافة بيانات أما في حالة تحميل المعلومات إلى DataGridView من DataSet فيكون ناقص 1.

PHP كود :
For 0 To dg.RowCount 2
         
For 0 To dg.ColumnCount 1
            exl_wst
.Cells(51).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.ObjectAs System.EventArgsHandles 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 ")"
                
.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 

تم الدرس بعون الله ولأي استفسارات أنا جاهز بإذن الله.

[/COLOR]
[/SIZE]


الملفات المرفقة صورة/صور
           
الرد }}}}
تم الشكر بواسطة: SUB NEW , مبرمج بلا حدود
#2
جزيت خير اخي والله انك مبدع وتستاهل احلى تقيم
الرد }}}}
تم الشكر بواسطة:
#3
تستاهل التقيم .. موضوع في ابداع .. مشكور
Everyone is a genius. It's just that some people are too stupidto realize it
الرد }}}}
تم الشكر بواسطة:
#4
مشاءالله ولا قوة الا بالله
الرد }}}}
تم الشكر بواسطة:
#5
بارك الله فيك
الرد }}}}
تم الشكر بواسطة:
#6
أحسنت وأبدعت
الرد }}}}
تم الشكر بواسطة:
#7
بارك الله فيك وجزاك عنا كل خير
الرد }}}}
تم الشكر بواسطة:


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  [مقال] دمج كل ملفات برنامجك الى ملف تنفيذى واحد ali.alfoly 25 7,880 02-12-16, 04:04 PM
آخر رد: ali.alfoly
  [VB.NET] شرح انشاء برنامج لتسجيل الدخول للمنتدى CLARO 2 435 27-10-16, 04:03 PM
آخر رد: rafaag777
  طباعة بيانات موجودة في برنامج على ( 2003 Microsoft Office Word ) abulayth 1 275 11-09-16, 07:20 AM
آخر رد: أبووسم
  حصرياً ( إطبع على الوورد من خلال برنامجك ) ( شرح بالصور ) m.sami.ak 20 1,979 20-08-16, 11:53 PM
آخر رد: الوادي
  الاستفادة من بارمترات الاخراج من SQL Server داخل برنامجك ابو ليلى 1 201 20-08-16, 02:16 AM
آخر رد: الوادي
Information تحميل برنامج الفيجوال بيسك 2010 download visual basic 2010 mohamed atef2018 0 258 09-07-16, 08:30 PM
آخر رد: mohamed atef2018
  العلاقات بين الجداول-الاضافة و الحذف و التعديل-برنامج لحفظ مصادر الموقع ابو ليلى 10 877 23-06-16, 01:13 PM
آخر رد: yasser_72
  شرح انشاء برنامج تحويل صيغ الملفات الصوتيه CLARO 9 319 02-06-16, 11:13 AM
آخر رد: CLARO
  [مشروع] مشروع برنامج لتشغيل ملفات mp3 alking-0999 1 389 01-06-16, 10:20 PM
آخر رد: CLARO
Star [VB.NET] شرح عمل امتداد خاص لبرامجك وجعل برنامجك يقرأ هذة الملفات mohammed_gamal381 22 7,393 01-06-16, 02:55 PM
آخر رد: ابراهيم كركوكي

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


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