Я загружаю файл Excel, открываю его, читаю содержимое, закрываю и удаляю его.
Все работает хорошо, однако я заметил, что процесс Microsoft Excel по-прежнему выполняется в фоновом режиме в задачеменеджер.
Я пробовал искать и пробовал разные ответы, но ни один из них не помог мне.У кого-нибудь есть идеи?
Я пытаюсь разными способами закрыть приложение, выпустить ком, но безуспешно.
Код, который я использую:
public ActionResult UploadUpdateOOBList()
{
CheckPermissions("UpdateOOBList");
string[] typesallowed = new string[] { ".xls", ".xlsx" };
HttpPostedFileBase file = Request.Files[0];
var fname = file.FileName;
if (!typesallowed.Any(fname.Contains))
{
return Json("NotAllowed");
}
file.SaveAs(Server.MapPath("~/Uploads/OOB List/") + fname);
//Create COM Objects. Create a COM object for everything that is referenced
Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application();
Microsoft.Office.Interop.Excel.Workbooks xlWorkbooks = xlApp.Workbooks;
Microsoft.Office.Interop.Excel.Workbook xlWorkbook = xlWorkbooks.Open(Server.MapPath("~/Uploads/OOB List/") + fname);
Microsoft.Office.Interop.Excel._Worksheet xlWorksheet = xlWorkbook.Sheets[2];
Microsoft.Office.Interop.Excel.Range xlRange = xlWorksheet.UsedRange;
//Create empty OOB data list
List<OOBList.OOBDetails> oob_data = new List<OOBList.OOBDetails>();
int rowcount = xlRange.Rows.Count;
for (int down = 4; down <= rowcount; down++)
{
//Make sure first column isn't null
if( xlRange.Cells[down, 1] != null && xlRange.Cells[down, 1].Value2 != null )
{
string siteno = xlRange.Cells[down, 1].Value2.ToString();
string sitename = xlRange.Cells[down, 2].Value2.ToString();
string description = xlRange.Cells[down, 4].Value2.ToString();
string cabinoob = xlRange.Cells[down, 5].Value2.ToString();
string toweroob = xlRange.Cells[down, 6].Value2.ToString();
string manageoob = xlRange.Cells[down, 7].Value2.ToString();
string resolutiondate = xlRange.Cells[down, 8].Value2.ToString();
var resolutiondate_converted = DateTime.FromOADate(Convert.ToDouble(resolutiondate)).ToString("dd/MM/yyyy");
oob_data.Add(new OOBList.OOBDetails
{
SiteNo = siteno,
SiteName = sitename,
Description = description,
CabinOOB = cabinoob,
TowerOOB = toweroob,
ManageOOB = manageoob,
TargetResolutionDate = resolutiondate_converted
});
Debug.Write("Adding SiteNo: " + siteno);
}
}
//HERE IS THE PROBLEM, DOESNT SEEM TO CLOSE THE PROCESS.
xlWorkbook.Close();
xlApp.Quit();
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlWorkbook);
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlWorkbooks);
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlWorksheet);
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlRange);
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApp);
xlWorkbook = null;
xlWorkbooks = null;
xlWorksheet = null;
xlRange = null;
xlApp = null;
GC.Collect();
//Now delete file.
System.IO.File.Delete(Server.MapPath("~/Uploads/OOB List/") + fname);
var nowdate = DateTime.Now.ToString("dd/MM/yyyy");
System.IO.File.WriteAllText(Server.MapPath("~/Uploads/OOB List/lastupdated.txt"),nowdate);
return Json("Success");
}