تقييم الموضوع :
  • 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 , مبرمج بلا حدود , السندبااد , tryold
#2
جزيت خير اخي والله انك مبدع وتستاهل احلى تقيم
الرد }}}
تم الشكر بواسطة:
#3
تستاهل التقيم .. موضوع في ابداع .. مشكور
Everyone is a genius. It's just that some people are too stupidto realize it
الرد }}}
تم الشكر بواسطة:
#4
مشاءالله ولا قوة الا بالله
الرد }}}
تم الشكر بواسطة:
#5
بارك الله فيك
الرد }}}
تم الشكر بواسطة:
#6
أحسنت وأبدعت
الرد }}}
تم الشكر بواسطة:
#7
بارك الله فيك وجزاك عنا كل خير
الرد }}}
تم الشكر بواسطة:
#8
السلام عليكم بارك الله فيك مشكور جزيلاً جزيلاً
الرد }}}
تم الشكر بواسطة:


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  نظرة على DropBox SDK و التعامل معها +برنامج رفع و تحميل ملفات ابو ليلى 4 4,881 08-09-22, 11:54 AM
آخر رد: saif2023
  برنامج مبيعات ومشتريات وإدارة أعمال ( الفاتورة الإلكترونية ) yassoo1985 2 2,262 04-06-22, 01:14 PM
آخر رد: yassoo1985
Heart طلب برنامج Advanced Installer أبو خالد الشكري 0 1,419 16-05-22, 09:12 PM
آخر رد: أبو خالد الشكري
  أهم طرق إدارة المخازن وتطبيقها على برنامج مخازن وارد ومنصرف Menna ahmeed 0 1,988 27-04-22, 12:52 PM
آخر رد: Menna ahmeed
  طريقة إنشاء برنامج طباعة ملصقات الباركود ملهمـ 1 4,407 22-12-21, 05:09 PM
آخر رد: alessam4pro
Heart [VB.NET] برنامج ادارة المطاعم و الكافيهات mgr21002100 6 6,681 14-01-21, 07:59 PM
آخر رد: abarrak
  تفعيل برنامج Visual Studio 2019 Adilo idabdellah 4 11,545 20-05-20, 11:48 AM
آخر رد: الفاضي
  برنامج المبيعات والمشتريات والمخازن و المطاعم mgr21002100 2 3,592 07-04-20, 04:29 AM
آخر رد: mgr21002100
  شرح انشاء برنامج دردشة بسيط CLARO 1 5,549 25-08-19, 04:30 AM
آخر رد: أمجد وضاح
  [VB.NET] برنامج ستايلات للفيجوال بيسك DK-x 2 5,964 14-08-19, 07:51 PM
آخر رد: أمجد وضاح

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


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