خواندن اطلاعات از Multiple Sheets از اکسل در Asp.Net
یکشنبه 9 فروردین 1394در این مقاله میخواهیم اطلاعات چند برگه را از اکسیل در برنامه خود بخوانیم
گاهی اوقات کاربر می خواهد برای دریافت داده ها از ورق های متعدد از فایل اکسل ونمایش داده ها روی صفحه استفاده کند بنابراین در این مقاله روش خواندن داده را از چندین ورق فایل اکسل را آموزش میدهیم.
در ابتدا یک فایل اکسل به نام 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; }
حالا میتونید برنامه رو اجرا کنید:
سپس فایل اکسلی که در بالا را ساختیم انتخاب کنید و روی دکمه خواندن اطلاعات از فایل کلیک کنید:
امیدوارم آموزش بالا مفید واقع بشه موفق و پیروز باشید.
- ASP.net
- 3k بازدید
- 2 تشکر