Tuesday, 29 May 2012

Welcome

Reading Excel file in ASP NET MVC

[HttpPost]
   
   public ActionResult ImportLegacyCasesResult(HttpPostedFileBase file)
        {
            var data = (DataTable)null;
            OleDbConnection excelConnection = new OleDbConnection();
            try
            {
                DataSet ds = new DataSet();
                string strFilePath = string.Empty;

                //The process cannot access the file because it is being used
                GC.Collect();
                GC.WaitForPendingFinalizers();

                if (Request.Files["file"].ContentLength > 0)
               
{
                    #region Excel Reading & Putting in Dataset Section
                    string fileExtension = System.IO.Path.GetExtension(Request.Files["file"].FileName);

                    if (fileExtension == ".xls" || fileExtension == ".xlsx")
                    {
                        strFilePath = Server.MapPath("~/UploadedFiles/");
                        string fileLocation = strFilePath + Request.Files["file"].FileName;

                        if (System.IO.File.Exists(fileLocation))
                        {
                            System.IO.File.Delete(Server.MapPath("~/UploadedFiles/") + Request.Files["file"].FileName);
                        }

                        Request.Files["file"].SaveAs(fileLocation);
                        string excelConnectionString = string.Empty;
                        //IMEX=1 for mixing number string for column data  if IMEX=2 ignoring string data from int column
                        excelConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + fileLocation + ";Extended Properties=\"Excel 12.0;HDR=NO;IMEX=1\"";
                        //connection String for xls file format.
                        if (fileExtension == ".xls")
                        {
                            //excelConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + fileLocation + ";Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=1\"";
                            excelConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + fileLocation + ";Extended Properties=\"Excel 8.0;HDR=NO;IMEX=1\"";
                        }
                        //connection String for xlsx file format.
                        else if (fileExtension == ".xlsx")
                        {
                            excelConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + fileLocation + ";Extended Properties=\"Excel 12.0;HDR=NO;IMEX=1\"";
                        }
                        //Create Connection to Excel work book and add oledb namespace
                        excelConnection = new OleDbConnection(excelConnectionString);
                        excelConnection.Open();
                        DataTable dt = new DataTable();

                        dt = excelConnection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
                        if (dt == null)
                        {
                            //return null;
                        }


                        String[] excelSheets = new String[dt.Rows.Count];
                        int t = 0;
                        //excel data saves in temp file here.
                        foreach (DataRow row in dt.Rows)
                        {
                            excelSheets[t] = row["TABLE_NAME"].ToString();
                            t++;
                        }
                        OleDbConnection excelConnection1 = new OleDbConnection(excelConnectionString);

                        string query = string.Format("Select * from [{0}]", excelSheets[0]);
                        //string query = string.Format("Select * from  [FULL REPORT$]");

                        using (OleDbDataAdapter dataAdapter = new OleDbDataAdapter(query, excelConnection1))
                        {
                            dataAdapter.Fill(ds);
                        }

                        excelConnection.Close();
                    }

                    #endregion Excel Reading & Putting in Dataset Section
                                             
                            /*Doing Import Work with thread  */
                            Thread ImportThread = new Thread(() => model.ImportEexcel(ds));
                            ImportThread .Name = "Import Thread";
                            ImportThread .Start();                         

                        }
                    }

   catch (Exception ex)
            {
                        excelConnection.Close();  
            }
            finally
            {
                excelConnection.Close();
            }
            return View(data);
        }

No comments:

Post a Comment