توضیحات و دانلود

خواندن و وارد کردن Excel SheetباکنترلGridViewدرASP.Net
0 0
خواندن و وارد کردن Excel SheetباکنترلGridViewدرASP.Net

با سلام در این مقاله توضیح می دهیم: چگونگی خواندن یا وارد کردن داده های ورق اکسل با کنترل GridView در ASP.Net با استفاده از OLEDB و ADO.Net.

مفهوم

1. مرور کاربر و انتخاب یک کتاب اکسل.

2. کاربر انتخاب می کند که آیا ردیف سرصفحه در صفحه اکسل وجود دارد یا نهکه برای این منظور از دکمه های رادیویی استفاده کنید.

3. کاربر فایل Excel را بارگذاری می کند

4. فایل آپلود شده توسط برنامه خوانده و در صفحه وب با استفاده ازکنترل GridView نمایش داده می شود.

5. GridView دارای صفحه بندی فعال است تا کاربر بتواند سوابق را به راحتی مشاهده کند.

رشته های اتصال

از آنجایی که اکسل 97-2003 و اکسل 2007 از ارائه دهندگان مختلف استفاده می کنند، دو کلید رشته اتصال در Web.Config قرار داده اند.

<connectionStrings>

  <add name ="Excel03ConString"

       connectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};

                         Extended Properties='Excel 8.0;HDR={1}'"/>

  <add name ="Excel07ConString"

       connectionString="Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};

                         Extended Properties='Excel 8.0;HDR={1}'"/>

</connectionStrings>

شما در بالا متوجه خواهید شد که دو رشته ارتباطی برای فرمت اکسل 97 - 2003 وجود دارد که از Microsoft Jet driver استفاده می کند و یکی دیگر از فرمت اکسل 2007 است که از Microsoft Ace driver استفاده می کند.

 از متغیرهایی برای منبع داده {0} و ویژگی HDR {1} استفاده میکنیم، به طوری که می توانیم به راحتی جای آن را در قسمت جلویی بر اساس فایل اکسل انتخاب شده و خصوصیت سرصفحه انتخاب کنیم که توسط کاربر انتخاب شده باشد

طرح Front End

درطراحی صفحه وبی که حاوی FileUpload Control است، دکمه ای  که برای بارگذاری فایل اکسل برای کاربرRadioButtonList است. برای انتخاب اینکه آیا هدر ها وجود داشته باشند یا نه بطور پیش فرض بله انتخاب شده و در نهایت خصوصیات  AllowPaging را برای GridView تنظیم می کنیم

<asp:Button ID="btnUpload" runat="server" Text="Upload"

            OnClick="btnUpload_Click" />

<br />

<asp:Label ID="Label1" runat="server" Text="Has Header ?" />

<asp:RadioButtonList ID="rbHDR" runat="server">

    <asp:ListItem Text = "Yes" Value = "Yes" Selected = "True" >

    </asp:ListItem>

    <asp:ListItem Text = "No" Value = "No"></asp:ListItem>

</asp:RadioButtonList>

<asp:GridView ID="GridView1" runat="server"

OnPageIndexChanging = "PageIndexChanging" AllowPaging = "true">

</asp:GridView>

آپلود و خواندن برگه اکسل

 همانطور که در Aspx متوجه شدید، پردازش رویداد OnClick را به دکمه آپلود اضافه می کنیم و هنگامی که دکمه آپلود کلیک می شود، فایل آپلود شده در پوشه ای که مسیر آن در بخش تنظیمات برنامه در Web.Config با استفاده از کلید زیر تعریف شده است، ذخیره می شود.

<appSettings>

  <add key ="FolderPath" value ="Files/"/>

</appSettings >

هنگامی که فایل در پوشه ذخیره می شود، متد Import_To_Grid فراخوانی می شود که بعدا توضیح داده می شود. کد زیر برای Upload handler   است

C #

protected void btnUpload_Click(object sender, EventArgs e)

{

    if (FileUpload1.HasFile)

    {

        string FileName = Path.GetFileName(FileUpload1.PostedFile.FileName);

        string Extension = Path.GetExtension(FileUpload1.PostedFile.FileName);

        string FolderPath = ConfigurationManager.AppSettings["FolderPath"];

 

        string FilePath = Server.MapPath(FolderPath + FileName);

        FileUpload1.SaveAs(FilePath);

        Import_To_Grid(FilePath, Extension, rbHDR.SelectedItem.Text);

    }

}

VB.Net

Protected Sub btnUpload_Click(ByVal sender As Object, ByVal e As System.EventArgs)

  If FileUpload1.HasFile Then

     Dim FileName As String = Path.GetFileName(FileUpload1.PostedFile.FileName)

     Dim Extension As String = Path.GetExtension(FileUpload1.PostedFile.FileName)

     Dim FolderPath As String = ConfigurationManager.AppSettings("FolderPath")

 

     Dim FilePath As String = Server.MapPath(FolderPath + FileName)

     FileUpload1.SaveAs(FilePath)

     Import_To_Grid(FilePath, Extension, rbHDR.SelectedItem.Text)

  End If

End Sub

در حال حاضر فایل ذخیره شده اکسل با استفاده از OLEDB خوانده می شود. بر اساس فرمت،  تصمیم می گیریم که درایور برای خواندن فایل اکسل استفاده شود و همچنین آیا اکسل به همراه سطر هدر یا بر اساس RadioButtonList خوانده خواهد شد. همه این مقادیر در متغیرهایی از رشته اتصال پر شده است.

پس از آن  طرح اکسل را برای پیدا کردن نام برگه اول می خوانیم  . سپس از طریق یک کوئری صفحه اول را فراخوانی می کنیم و مقادیر خوانده شده را در یک dataatable میریزیم و مقادیر را در یک GridView نمایش می دهیم .

C #

private void Import_To_Grid(string FilePath, string Extension, string isHDR)

{

    string conStr="";

    switch (Extension)

    {

        case ".xls": //Excel 97-03

            conStr = ConfigurationManager.ConnectionStrings["Excel03ConString"]

                     .ConnectionString;

            break;

        case ".xlsx": //Excel 07

            conStr = ConfigurationManager.ConnectionStrings["Excel07ConString"]

                      .ConnectionString;

            break;

    }

    conStr = String.Format(conStr, FilePath, isHDR);

    OleDbConnection connExcel = new OleDbConnection(conStr);

    OleDbCommand cmdExcel = new OleDbCommand();

    OleDbDataAdapter oda = new OleDbDataAdapter();

    DataTable dt = new DataTable();

    cmdExcel.Connection = connExcel;

 

    //Get the name of First Sheet

    connExcel.Open();

    DataTable dtExcelSchema;

    dtExcelSchema = connExcel.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);

    string SheetName = dtExcelSchema.Rows[0]["TABLE_NAME"].ToString();

    connExcel.Close();

 

    //Read Data from First Sheet

    connExcel.Open();

    cmdExcel.CommandText = "SELECT * From [" + SheetName + "]";

    oda.SelectCommand = cmdExcel;

    oda.Fill(dt);

    connExcel.Close();

 

    //Bind Data to GridView

    GridView1.Caption = Path.GetFileName(FilePath);

    GridView1.DataSource = dt;

    GridView1.DataBind();

}

VB.Net

Private Sub Import_To_Grid(ByVal FilePath As String, ByVal Extension As String, ByVal isHDR As String)

  Dim conStr As String = ""

  Select Case Extension

      Case ".xls"

           'Excel 97-03

           conStr = ConfigurationManager.ConnectionStrings("Excel03ConString") _

                      .ConnectionString

           Exit Select

      Case ".xlsx"

           'Excel 07

            conStr = ConfigurationManager.ConnectionStrings("Excel07ConString") _

                      .ConnectionString

            Exit Select

  End Select

  conStr = String.Format(conStr, FilePath, isHDR)

 

  Dim connExcel As New OleDbConnection(conStr)

  Dim cmdExcel As New OleDbCommand()

  Dim oda As New OleDbDataAdapter()

  Dim dt As New DataTable()

 

  cmdExcel.Connection = connExcel

 

  'Get the name of First Sheet

  connExcel.Open()

  Dim dtExcelSchema As DataTable

  dtExcelSchema = connExcel.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, Nothing)

  Dim SheetName As String = dtExcelSchema.Rows(0)("TABLE_NAME").ToString()

  connExcel.Close()

 

  'Read Data from First Sheet

   connExcel.Open()

   cmdExcel.CommandText = "SELECT * From [" & SheetName & "]"

   oda.SelectCommand = cmdExcel

   oda.Fill(dt)

   connExcel.Close()

 

   'Bind Data to GridView

    GridView1.Caption = Path.GetFileName(FilePath)

    GridView1.DataSource = dt

    GridView1.DataBind()

End Sub

صفحه بندی در GridView

حالا برای پیاده سازی باید هر بار برگه اکسل را بخوانیم و سپس مقادیر  datatable پر شده را در GridView نمایش دهیم . به کد زیر مراجعه کنید

C #

protected void PageIndexChanging(object sender, GridViewPageEventArgs e)

{

    string FolderPath = ConfigurationManager.AppSettings["FolderPath"] ;

    string FileName = GridView1.Caption;

    string Extension = Path.GetExtension(FileName);

    string FilePath = Server.MapPath(FolderPath + FileName);

 

    Import_To_Grid(FilePath, Extension, rbHDR.SelectedItem.Text); 

    GridView1.PageIndex = e.NewPageIndex;

    GridView1.DataBind(); 

}

VB.Net

Protected Sub PageIndexChanging(ByVal sender As Object, ByVal e As GridViewPageEventArgs)

   Dim FolderPath As String = ConfigurationManager.AppSettings("FolderPath")

   Dim FileName As String = GridView1.Caption

   Dim Extension As String = Path.GetExtension(FileName)

   Dim FilePath As String = Server.MapPath(FolderPath + FileName)

 

   Import_To_Grid(FilePath, Extension, rbHDR.SelectedItem.Text)

   GridView1.PageIndex = e.NewPageIndex

   GridView1.DataBind()

End Sub

شکل زیر GridView را نمایش می دهد که از سند Excel ساخته شده است که با استفاده از FileUpload Control آپلود می شود.

 

نکته مهم این است که همیشه پس از خواندن سند اکسل، همیشه اتصالات را ببندید تا از خطاهای زیر جلوگیری شود

Server Error in 'ASP.Net' Application.

 

The process cannot access the file 'F:\ReadExcelToGrid\Files\Excel07.xlsx' because it is being used by another process.

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.IO.IOException: The process cannot access the file 'F:\ReadExcelToGrid\Files\Excel07.xlsx' because it is being used by another process.

 


دانلود
  • لینک های دانلود دوره های آموزشی تا پایان دوره قابل دانلود می باشد.
  • برای خارج کردن فایل ها از حالت فشرده از ورژن جدید نرم افزار winrar استفاده کنید.
  • برای خارج کردن فایل ها از حالت فشرده لینک های دانلودی که چندین قسمت می باشند فقط قسمت اول را از حالت فشرده خارج کنید.
  • لطفا توضیحات نوشته شده برای مطالب را با دقت بخوانید.
  • برای نمایش فیلم ها می توانید از نرم افزار هایی مانند Km Player , VLC Player یا Media Player Classic استفاده کنید.

ارسال نظر
ارسال پیام به :