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

وارد کردن داده های Excel به GridView در ASP.Net
0 0
وارد کردن داده های Excel به GridView در ASP.Net

با سلام در این مقاله با یک مثال توضیح خواهیم داد که چگونه می توان داده های Excel را به GridView با استفاده از OLEDB و ADO.Net در ASP.Net با C # و VB.Net وارد کرد.
مفهوم
1. کاربر یک اکسل Workbook را مرور و انتخاب می کند.
2. کاربر انتخاب می کند که ردیف هدر در Excel Sheet وجود دارد و از دکمه های رادیویی استفاده نمی کند.
3. Workbook Excel را بارگذاری می کند.
4- فایل بارگذاری شده توسط برنامه خوانده و در صفحه وب با استفاده از GridView نمایش داده می شود.
5- GridView صفحه بندی را فعال کرده است تا کاربر بتواند سوابق را به راحتی مشاهده کند.
رشته های اتصال
از آنجا که در Excel 97-2003 و Excel 2007 از ارائه دهندگان مختلف استفاده می کنند ، دو کلید رشته اتصال در Web.Config یکی برای فرمت Excel 97 - 2003 که از درایور Microsoft Jet و دیگری برای فرمت Excel 2007 است که از درایور Microsoft Ace استفاده می کند.
متغیرهای نگهدارنده برای ویژگی Data Source {0} و  HDR {1 used استفاده می شوند تا براساس فایل Excel انتخاب شده و به ترتیب ویژگی Headers که توسط کاربر از طریق RadioButtonList انتخاب شده اند ، آن را به راحتی در قسمت جلویی جایگزین کنند.

<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 12.0;HDR={1}'"/>
</connectionStrings >

کد HTML
کد HTML زیر شامل یک FileUpload Control است ، یک دکمه برای بارگذاری فایل RadioButtonList ، Excel است که برای کاربر استفاده می شود تا انتخاب کند که هدر ها وجود دارند یا GridView که ویژگی AllowPaging برای آن true است استفاده می شود.

<asp:FileUpload ID="FileUpload1" runat="server" />
<asp:Button ID="btnUpload" runat="server" Text="Upload" OnClick="btnUpload_Click" />
<br />
<asp:Label ID="Label1" runat="server" Text="Has Header ?"></asp:Label><br />
<asp:RadioButtonList ID="rbHDR" runat="server" RepeatLayout = "Flow">
    <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>

آپلود و خواندن برگه اکسل
با کلیک بر روی دکمه بارگذاری ، فایل با استفاده از کلید زیر در یک پوشه (فهرست) در دیسک سرور ذخیره می شود که مسیر آن در بخش AppSettings در Web.Config مشخص شده است.

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

پس از ذخیره شدن فایل در پوشه (دایرکتوری) در دیسک سرور ، روش Import_To_Grid استفاده می شود.
در داخل تابع Import_To_Grid ، فایل اکسل ذخیره شده با استفاده از درایور OLEDB است سپس Schema از فایل اکسل خوانده  و نام اولین صفحه مشخص می شود.
سرانجام داده های برگ اکسل در DataTable خوانده می شوند که برای جمع آوری GridView استفاده می شود.
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);
    }
}
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

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
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
صفحه بندی با استفاده از رویداد OnPageIndexChanging پیاده سازی می شود . فایل اکسل دوباره خوانده می شود و صفحه Index از 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

عکسهای صفحه
فایل اکسل خوانده شده

 

فایل اکسل بدون هدر خوانده می شود

خطا
خطای زیر (استثنا) در صورت باز شدن یا استفاده توسط برخی برنامه های دیگر ایجاد میشود ، می توانید پرونده Excel را بخوانید.

 
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 استفاده کنید.

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