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