خروجي دادن (Export کردن) داده ها به برنامه اکسل
گروه: .NET C# VB.NET Database
تاریخ ثبت: ۸۶/۲/۳۱
نویسنده: رحمت الله باهنر

همان گونه که مي دانيد، يکي از امکانات خوب هر برنامه اي آن است که بتواند داده ها را با فرمت هاي گوناگون خروجي دهد. همچنين احتمالا ديده ايد که توليد کنندگان يک نرم افزار، هنگام شمردنِ امکانات نرم افزار خود، اين مورد را با آب و تاب فراوان ياد مي کنند؛ که البته حق هم دارند چرا که اکسل يک استاندارد عمومي است و امکانات زيادي دارد.

در اين مقاله قصد دارم نشان دهم که چگونه مي توان داده ها را (به طور مثال داده هاي يک جدول بانک اطلاعات) را به اکسل فرستاد.

براي انجام اين پروژه نياز به Visual Studio.Net 2005 و SQL Server 2005 (نگارش Express يا کامل) خواهيد داشت.

در اين پروژه همچنين از يک بانک اطلاعات (با نام Students) استفاده شده که داراي جدول ذيل (با نام Names) است:

 

نام فيلد توضيح
StudentID(INT IDENTITY)

کد دانشجويي

FName (NVARCHAR(15)) نام
LName(NVARCHAR(20)) نام خانوادگي

 

اکنون مراحل ذيل را انجام دهيد:

۱.       در ويژوال استوديو يک پروژة جديد از نوع Widows Application ايجاد کنيد.

۲.       با استفاده از منوي Project يک ارجاع به فايل dll اکسل ايجاد کنيد: در کادر مکالمة افزودن ارجاع، از تب Browse به مسيري که Office را نصب کرده ايد، برويد؛ مانند: C:\Program Files\Microsoft Office\Ofiice12\EXCEL. (توجه کنيد که فايل dll اکسل با حروف بزرگ مشخص است).

۳.       يک DataGridView و يک Button بر روي فرم قرار دهيد.

۴.       با کليک مضاعف بر روي فرم به ويرايشگر کد منتقل شده و ابتدا فضاي نام هاي ذيل را –اگر وجود ندارد- وارد کنيد:

 

VB:

Imports System.Data

Imports System.Data.SqlClient

Imports Microsoft.Office.Interop

 

C#:

using System.Data;

using System.Data.SqlClient;

using Microsoft.Office.Interop;

using Microsoft.Office.Interop.Excel;

 

۵.       اکنون يک متغير از نوع DataSet را در داخل کلاس اعلان کنيد:

VB:

Private ds As DataSet

 

C#:

private DataSet ds;

 

۶.       در رويداد Load فرم، داده ها را در کنترل DataGridView نمايش دهيد:

VB:

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) _

Handles MyBase.Load

    Try

        Dim con As New SqlConnection _

          ("Data Source=.\SQLEXPRESS;Initial Catalog=Students;Integrated Security=True")

        Dim strSQL As String = "SELECT * FROM Names"

        Dim da As New SqlDataAdapter(strSQL, con)

        ds = New DataSet

        Dim tbl As DataTable = ds.Tables.Add("Students")

        da.Fill(ds, "Students")

        Me.DataGridView1.DataSource = ds.Tables(0)

    Catch ex As Exception

        MessageBox.Show(ex.Message)

    End Try

End Sub

 

C#:

private void Form1_Load(object sender, EventArgs e)

  try

   {      

        SqlConnection con = new SqlConnection

        ("Data Source=.\\SQLEXPRESS;Initial Catalog=Students;Integrated Security=True");

        string strSQL = "SELECT * FROM Names";

        SqlDataAdapter da = new SqlDataAdapter(strSQL, con);

        ds = new DataSet();

        System.Data.DataTable tbl = ds.Tables.Add("Students");

        da.Fill(ds, "Students");

        dataGridView1.DataSource = ds.Tables[0];

   }

  catch (Exception ex)

  {

        MessageBox.Show(ex.Message);

   }

}

 

مطمينا اگر شما با برنامه نويسي بانک اطلاعات آشنا باشيد اين قطعه کد کاملا براي شما آشنا است؛ پس نيازي به توضيح نيست.

 

۷.       اکنون در محيط طراحي، بر روي Button1 کليک مضاعف کرده و کدِ آن را اين گونه بنويسيد:

VB:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _

Handles Button1.Click

    Try

       Dim excelApp As New Excel.Application()

       Dim excelBook As Excel.Workbook = excelApp.Workbooks.Add

       Dim excelWorksheet As Excel.Worksheet = _

                CType(excelBook.Worksheets(1), Excel.Worksheet)

       excelApp.Visible = True

       Dim i As Integer = 2

       Dim j As Integer

       With excelWorksheet

          .DisplayRightToLeft = True

          .Range("A1").Value = "کد"

          .Range("A1").Font.Bold = True

          .Range("B1").Value = "نام"

          .Range("B1").Font.Bold = True

          .Range("C1").Value = "نام خانوادگي"

          .Range("C1").Font.Bold = True

         For j = 0 To ds.Tables(0).Rows.Count - 1

             .Range("A" & i.ToString).Value = ds.Tables(0).Rows(j).Item(0)

             .Range("B" & i.ToString).Value = ds.Tables(0).Rows(j).Item(1)

             .Range("C" & i.ToString).Value = ds.Tables(0).Rows(j).Item(2)

             i += 1

         Next

       End With

    Catch ex As Exception

         MessageBox.Show(ex.Message)

    End Try

End Sub

 

C#:

private void button1_Click(object sender, EventArgs e)

{

   try

   {

      Microsoft.Office.Interop.Excel.Application excelApp = new

          Microsoft.Office.Interop.Excel.Application();

      Microsoft.Office.Interop.Excel.Workbook excelBook =

          excelApp.Workbooks.Add(XlSheetType.xlWorksheet);

      Microsoft.Office.Interop.Excel.Worksheet excelWorksheet =

          (Worksheet)(excelBook.Worksheets[1]);

       excelApp.Visible = true;

      excelWorksheet.DisplayRightToLeft = true;

       Range rng1 = excelWorksheet.get_Range("A1", "A1");

      rng1.Value2 = "کد";

      rng1.Font.Bold = true;

      Range rng2 = excelWorksheet.get_Range("B1", "B1");

      rng2.Value2 = "نام";

      rng2.Font.Bold = true;

      Range rng3 = excelWorksheet.get_Range("C1", "C1");

      rng3.Value2 = "نام خانوادگي";

      rng3.Font.Bold = true;

      int i = 1;

      foreach (DataRow r in ds.Tables[0].Rows)

      {

           i++;

           string s = i.ToString();

           Range r1 = excelWorksheet.get_Range("A" + s, "A" + s);

           r1.Value2 = r[0].ToString();

           Range r2 = excelWorksheet.get_Range("B" + s, "B" + s);

           r2.Value2 = r[1].ToString();

           Range r3 = excelWorksheet.get_Range("C" + s, "C" + s);

           r3.Value2 = r[2].ToString();                  

       }

    }

    catch (Exception ex)

    {

        MessageBox.Show(ex.Message);

    }

}

 

فکر مي کنم منطق اين قطعه کد کاملاً ساده است: ابتدا بايد يک نمونه از Excel Application ايجاد شود؛ سپس يک WorkBook و يک WorkSheet. همان گونه که مي دانيد، هر سند اکسل از يک WorkBook تشکيل مي شود که حاوي يک يا چند WorkSheet است.

تنها واژه اي که نياز به توضيح دارد Range است: Range محدوده اي از خانه هاي يک WorkSheet است که مي تواند شامل يک يا چند خانه باشد؛ دو آرگومان آن خانه های ابتدا و انتها را مشخص می کند. در قطعه کد بالا ابتدا چند Range ايجاد کرده ايم که به عنوان Header (سرستون) نمايش داده مي شود؛ سپس در داخل يک حلقه، به از اي هر سطر و فيلد از جدول Students يک Range ايجاد مي کنيم و آن را مقداردهي مي کنيم. اگر کمي دقت کنيد مي بينيد که کاملا ساده است.

نتيجة کار مانند ذيل است:

 

نکتة آخر اين که شما از داخل کد خود کارهاي زيادي با اکسل مي توانيد انجام دهيد مانند محاسبات گوناگون، استفاده از چارت هاي اکسل و ...

 


Copyright © 2006 - 2007 All Rights Reserved.
Please direct your questions or comments to