خواندن اطلاعات از Multiple Sheets از اکسل در Asp.Net

یکشنبه 9 فروردین 1394

در این مقاله میخواهیم اطلاعات چند برگه را از اکسیل در برنامه خود بخوانیم

خواندن اطلاعات از Multiple Sheets از اکسل در Asp.Net

گاهی اوقات کاربر می خواهد برای دریافت داده ها از ورق های متعدد از فایل اکسل ونمایش داده ها روی صفحه استفاده کند بنابراین در این مقاله روش خواندن داده را از چندین ورق فایل اکسل را آموزش میدهیم.

در ابتدا یک فایل اکسل به نام MyExcel.xlsx به شکل زیر میسازیم :

دربرگه اول اطلاعات زیر را وارد کنید :

 برگه دوم :

برگه سوم :

به نام برگه ها دقت کنید :

برای انجام این مثال به ابزار زیر نیاز داریم:

1- یک کنترل فایل آپلود

2- سه عدد گرید ویو برای نمایش داده های هر برگه

3- یک دکمه

برنامه ویژوال استدیو خود را باز کنید و یک پروژه جدید از نوع وب فرم بسازید:

حال در پنجره Solution Explorer روی نام پروژه کلیک راست کرده و یک صفحه جدید به نام Default به پروژه خود اضافه کنید سپس از جعبه ابزار خود سه مورد ذکر شده در بالا را به صفحه جدید اضافه کنید:

        <asp:FileUpload ID="FileUpload1" runat="server" />
        <asp:Button ID="Button1" runat="server" Text="خواندن اطلاعات از فایل" />
        <asp:GridView ID="GridView1" runat="server"></asp:GridView>
        <asp:GridView ID="GridView2" runat="server"></asp:GridView>
        <asp:GridView ID="GridView3" runat="server"></asp:GridView>

حالت دیزاین صفحه :

سه فضای نام مورد استفاده قرار میگیرد:

using System.IO; 
using System.Data.OleDb; 
using System.Data;

Io برای فایل و مسیر فیزیکی و data برای کار با datattable  و از همه مهم تر oledb برای اتصال به فایل اکسل

Microsoft Excel شبیه یک پایگاه داداه است و oledb برای اتصال استفاده شده است

حال در رویداد کلیک دکمه خواندن اطلاعات کد زیر را بنویسید:

       protected void Button1_Click(object sender, EventArgs e)
        {
            //if File is not selected then return  
            if (Request.Files["FileUpload1"].ContentLength <= 0)
            {
                return;
            }

            //Get the file extension  
            string fileExtension = Path.GetExtension(Request.Files["FileUpload1"].FileName);

            //If file is not in excel format then return  
            if (fileExtension != ".xls" && fileExtension != ".xlsx")
            {
                return;
            }

            //Get the File name and create new path to save it on server  
            string fileLocation = Server.MapPath("\\") + Request.Files["FileUpload1"].FileName;

            //if the File is exist on serevr then delete it  
            if (File.Exists(fileLocation))
            {
                File.Delete(fileLocation);
            }
            //save the file lon the server before loading  
            Request.Files["FileUpload1"].SaveAs(fileLocation);

            //Create the QueryString for differnt version of fexcel file  
            string strConn = "";
            switch (fileExtension)
            {
                case ".xls":
                    //Excel 1997-2003  
                    strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + fileLocation + ";Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=1\"";
                    break;
                case ".xlsx":
                    //Excel 2007-2010  
                    strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + fileLocation + ";Extended Properties=\"Excel 12.0 xml;HDR=Yes;IMEX=1\"";
                    break;
            }
            //Get the sheets data and bind that data to the grids  
            BindData(strConn);

            //Delete the excel file from the server  
            File.Delete(fileLocation);   
        }

در کد بالا از یک تابع به نام binddata استفاده شده که وظیفه این تابع اتصال به فایل اکسل و پر کردن گرید ویو ها می باشد:

private void BindData(string strConn)
{  
    OleDbConnection objConn = new OleDbConnection(strConn);  
    objConn.Open();  
  
    // Get the data table containg the schema guid.  
    DataTable dt = null;  
    dt = objConn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);  
    objConn.Close();  
  
    if (dt.Rows.Count > 0)
    {  
        int i = 0;  
  
        // Bind the sheets to the Grids  
        foreach(DataRow row in dt.Rows)
        {  
            DataTable dt_sheet = null;  
            dt_sheet = getSheetData(strConn, row["TABLE_NAME"].ToString());  
            switch (i)
            {  
                case 0:  
                    GridView1.DataSource = dt_sheet;  
                    GridView1.DataBind();  
                    break;  
                case 1:  
                    GridView2.DataSource = dt_sheet;  
                    GridView2.DataBind();  
                    break;  
                case 2:  
                    GridView3.DataSource = dt_sheet;  
                    GridView3.DataBind();  
                    break;  
            }  
            i++;  
        }  
    }  
}  

داخل بدنه تابع BindData تابع دیگری به نام getSheetData استفاده شده که این تابع اطلاعات هر برگه رو میخواند:

private DataTable getSheetData(string strConn, string sheet)
{  
    string query = "select * from [" + sheet + "]";  
    OleDbConnection objConn;  
    OleDbDataAdapter oleDA;  
    DataTable dt = new DataTable();  
    objConn = new OleDbConnection(strConn);  
    objConn.Open();  
    oleDA = new OleDbDataAdapter(query, objConn);  
    oleDA.Fill(dt);  
    objConn.Close();  
    oleDA.Dispose();  
    objConn.Dispose();  
    return dt;  
}  

حالا میتونید برنامه رو اجرا کنید:

سپس فایل اکسلی که در بالا را ساختیم انتخاب کنید و روی دکمه خواندن اطلاعات از فایل کلیک کنید:

امیدوارم آموزش بالا مفید واقع بشه موفق و پیروز باشید.

فایل های ضمیمه

برنامه نویسان

نویسنده 3355 مقاله در برنامه نویسان

کاربرانی که از نویسنده این مقاله تشکر کرده اند

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید