تحميل سجلات Excel في DataGridView في #C

اذهب الى الأسفل

تحميل سجلات Excel في DataGridView في #C Empty تحميل سجلات Excel في DataGridView في #C

مُساهمة من طرف السنى في الأربعاء نوفمبر 20, 2019 4:01 pm

يوضح هذا المثال كيف يمكنك تحميل سجلات Excel في عنصر تحكم DataGridView.

يستخدم هذا المثال مكتبة التشغيل المتداخل [ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط] لإنشاء خادم Excel. قبل أن تتمكن من استخدام المكتبة ، تحتاج إلى إضافة إشارة إليها. للقيام بذلك ، افتح نافذة الخصائص ، وانقر بزر الماوس الأيمن فوق المراجع ، وحدد إضافة مرجع. في علامة التبويب COM ، انقر نقرًا مزدوجًا فوق إدخال مكتبة كائنات Microsoft Excel 14.0.

تحميل سجلات Excel في DataGridView في #C 250351664

لتسهيل استخدام المكتبة ، أضف ما يلي باستخدام التوجيه إلى أعلى ملف التعليمات البرمجية

الكود:
using Excel = Microsoft.Office.Interop.Excel;

لتسهيل العثور على مصنف Excel ، أضفته إلى المشروع. للقيام بذلك ، افتح قائمة Project وحدد "إضافة عنصر موجود". حدد الملف وانقر فوق إضافة.

ثم في Solution Explorer ، انقر فوق المصنف. في الإطار "خصائص" ، قم بتعيين خاصية "Build Action" الخاصة بها على Content وتعيين خاصية "Copy to Output Directory" إلى "Copy if newer". الآن عند تشغيل البرنامج ، سيتم نسخ الملف إلى الدليل القابل للتنفيذ حتى يتم البرنامج يمكن العثور عليه بسهولة.

عند بدء تشغيل البرنامج ، تضع التعليمة البرمجية التالية موقع الملف في مربع نص البرنامج

الكود:
private void Form1_Load(object sender, EventArgs e)
{
    txtFile.Text = Application.StartupPath + "\\Books.xlsx";
}

فى حدث النقر لزر تحميل الملف نكتب الشرفة التالية :

الكود:
private void btnLoad_Click(object sender, EventArgs e)
{
    // الحصول على كائن تطبيق Excel .
    Excel.Application excel_app = new Excel.ApplicationClass();

    // اجعل Excel مرئيًا (اختياري)
    excel_app.Visible = true;

    // افتح المصنف للقراءة فقط
    Excel.Workbook workbook = excel_app.Workbooks.Open(
        txtFile.Text,
        Type.Missing, true, Type.Missing, Type.Missing,
        Type.Missing, Type.Missing, Type.Missing, Type.Missing,
        Type.Missing, Type.Missing, Type.Missing, Type.Missing,
        Type.Missing, Type.Missing);

    // Get the first worksheet.
    Excel.Worksheet sheet = (Excel.Worksheet)workbook.Sheets[1];

    // الحصول على ورقة العمل الأولى.
    Excel.Range used_range = sheet.UsedRange;

    // الحصول على الحد الأقصى للصف ورقم العمود .
    int max_row = used_range.Rows.Count;
    int max_col = used_range.Columns.Count;

    // الحصول على قيم الورقة.
    object[,] values = (object[,])used_range.Value2;

    // الحصول على عناوين الأعمدة.
    SetGridColumns(dgvBooks, values, max_col);

    // الحصول على البيانات.
    SetGridContents(dgvBooks, values, max_row, max_col);

    // أغلق المصنف دون حفظ التغييرات.
    workbook.Close(false, Type.Missing, Type.Missing);

    // أغلق خادم Excel.
    excel_app.Quit();
}

ينشئ هذا الرمز كائن تطبيق Excel ويستخدمه لفتح المصنف. لاحظ أن الأسلوب Workbooks.Open (والعديد من أساليب تطبيق Excel الأخرى) تأخذ معلمات كائنات غير محددة. على الرغم من أنه من الشائع استخدام عدد قليل فقط من هذه المعلمات ، لا يمكنك ببساطة تعيين المعلمات الفارغة. بدلاً من ذلك ، يجب عليك استخدام القيمة الخاصة Type.Missing للإشارة إلى أنك لا تستخدم معلمة.

يحصل الرمز بعد ذلك على مراجع لورقة العمل الأولى في المصنف. إذا كانت البيانات التي تريدها موجودة في واحدة من أوراق العمل الأخرى في المصنف ، فحددها بدلاً من ذلك.

بعد ذلك ، يحتاج البرنامج إلى معرفة مكان وجود البيانات في ورقة العمل. يستخدم خاصية UsedRange الخاصة بالورقة للحصول على نطاق يمثل الخلايا التي تستخدمها ورقة العمل. لاحظ أن النطاق لا يتضمن صفوفًا وأعمدة فارغة تمامًا. يحتوي مصنف هذا المثال على بيانات في الأعمدة من B إلى E والصفوف من 3 إلى 12. لا يشمل النطاق المستخدم العمود الفارغ A أو الصفوف الفارغة 1 و 2. وهذا يعني أن البرنامج لن يضيع مساحة يعرض الصفوف والأعمدة الفارغة في DataGridView .

بعد العثور على النطاق المستخدم ، يحصل الرمز على عدد الصفوف والأعمدة.

بعد ذلك ، يستخدم البرنامج طريقة Value2 للنطاق المستخدم لنسخ القيم في النطاق إلى صفيف ثنائي الأبعاد. يستدعي الأساليب المساعدة SetGridColumns و SetGridContents لتعريف أعمدة الشبكة ولتحميل سجلات Excel في الشبكة.

بعد أن يقوم بتحميل البيانات ، يغلق البرنامج المصنف وخادم Excel.

يُظهر التعليمة البرمجية التالية الأسلوب المساعد SetGridColumns

الكود:
//قم بتعيين أسماء أعمدة الشبكة من الصف 1.
private void SetGridColumns(DataGridView dgv,
    object[,] values, int max_col)
{
    dgvBooks.Columns.Clear();

    // الحصول على قيم العنوان.
    for (int col = 1; col <= max_col; col++)
    {
        string title = (string)values[1, col];
        dgv.Columns.Add("col_" + title, title);
    }
}

يتم تنفيذ هذه الطريقة عبر الخلايا الموجودة في الصف الأول من صفيف البيانات وتضيف كل قيمة إلى مجموعة أعمدة عنصر التحكم DatagridView. يقوم بتعيين اسم عمود إلى نص الخلية مع وجود "col_" مسبقًا أمامه. يقوم بتعيين نص العمود إلى قيمة الخلية.

يُظهر التعليمة البرمجية التالية الأسلوب المساعد SetGridContents

الكود:
// ضبط محتويات الشبكة.
private void SetGridContents(DataGridView dgv,
    object[,] values, int max_row, int max_col)
{
    // Copy the values into the grid.
    for (int row = 2; row <= max_row; row++)
    {
        object[] row_values = new object[max_col];
        for (int col = 1; col <= max_col; col++)
            row_values[col - 1] = values[row, col];
        dgv.Rows.Add(row_values);
    }
}
السنى
السنى
........
........

تاريخ التسجيل : 18/02/2011
المساهمات : 233
النقاط : 441
التقيم : 26
الجنس : ذكر

الرجوع الى أعلى الصفحة اذهب الى الأسفل

الرجوع الى أعلى الصفحة

ََ

مواضيع ذات صلة


 
صلاحيات هذا المنتدى:
لاتستطيع الرد على المواضيع في هذا المنتدى