C# 获取数据后立即从后台进程中删除Excel工作表
我使用下面的代码从内存中释放excel工作表,但在代码运行后,excel工作表仍在后台。请帮忙 公共void加载单(bool导出,字符串projectName) {C# 获取数据后立即从后台进程中删除Excel工作表,c#,.net-3.5,C#,.net 3.5,我使用下面的代码从内存中释放excel工作表,但在代码运行后,excel工作表仍在后台。请帮忙 公共void加载单(bool导出,字符串projectName) { xlApp = new Excel.ApplicationClass(); int rCnt = 0; { xlWorkBook = xlApp.Workbooks.Open(@"E:/try/" + DateTime.Now.T
xlApp = new Excel.ApplicationClass();
int rCnt = 0;
{
xlWorkBook = xlApp.Workbooks.Open(@"E:/try/" + DateTime.Now.ToString("M.d.yyyy")+@"/"+ projectName+ ".xlsx", 0, false, 5, "", "", false, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", true, true, 0, true, 1, 0);
xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets["Upload Data"];
range = xlWorkSheet.UsedRange;
totalt.Text = range.Rows.Count.ToString();
currentID.Text = (range.Rows.Count+1).ToString();
Excel.Range).Value2;
xlWorkBook.Close(true, null, null);
xlApp.Quit();
releaseObject(xlWorkSheet);
releaseObject(xlWorkBook);
releaseObject(xlApp);
}
}
private void releaseObject(object obj)
{
try
{
System.Runtime.InteropServices.Marshal.ReleaseComObject(obj);
MessageBox.Show("Released"+obj.ToString());
obj = null;
}
catch (Exception ex)
{
obj = null;
MessageBox.Show("Exception Occured while releasing object " + ex.ToString());
}
finally
{
GC.Collect();
}
}
从excel工作表中获取所需数据后,我希望将其从后台删除。此类双点调用表达式:
xlWorkBook = xlApp.Workbooks.Open(/*args*/);
xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets["Upload Data"];
你应该换成
var workbooks = excel.Workbooks;
xlWorkBook = workbooks.Open(/*params*/)
var worksheets = xlWorkBook.Worksheets;
xlWorkSheet = worksheets["Upload Data"];
//business logic here
Marshal.ReleaseComObject(xlWorkSheet);
Marshal.ReleaseComObject(worksheets);
Marshal.ReleaseComObject(xlWorkBook);
Marshal.ReleaseComObject(workbooks);
Marshal.ReleaseComObject(excel);
有关详细信息,请参阅:
upd:
xlApp = new Excel.ApplicationClass();
int rCnt = 0;
{
var workbooks = xlApp.Workbooks;
xlWorkBook = xlApp.Workbooks.Open(@"E:/try/" + DateTime.Now.ToString("M.d.yyyy")+@"/"+ projectName+ ".xlsx", 0, false, 5, "", "", false, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", true, true, 0, true, 1, 0);
var worksheets = xlWorkBook.Worksheets;
xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets["Upload Data"];
range = xlWorkSheet.UsedRange;
var rows = range.Rows;
totalt.Text = rows.Count.ToString();
currentID.Text = (rows.Count + 1).ToString();
xlWorkBook.Close(true, null, null);
xlApp.Quit();
Marshal.ReleaseComObject(rows);
Marshal.ReleaseComObject(range);
Marshal.ReleaseComObject(xlWorkSheet);
Marshal.ReleaseComObject(worksheets);
Marshal.ReleaseComObject(xlWorkBook);
Marshal.ReleaseComObject(workbooks);
Marshal.ReleaseComObject(xlApp);
}
}
你能粘贴interop excel使用的所有代码吗?另外,这是一个典型的问题,请查看代码什么意思
excel.Range).Value2;
。此代码未编译但似乎不起作用。你能更改我给出的上述代码吗..并帮助我excel.Workbooks a=xlApp.Workbooks;xlWorkBook=a.打开(“E:\\try\\CL.xlsx”,0,false,5,“,”,false,Microsoft.Office.Interop.Excel.XlPlatform.xlWindows,“\t”,true,false,0,true,1,0);
然后添加了releaseObject(a),但它仍然不起作用