繁体   English   中英

提取数据后立即从后台进程中删除Excel工作表

[英]Remove Excel sheet from background process immediately after data is fetched

我正在使用下面的代码从内存中释放Excel工作表,但是代码运行后,Excel工作表仍在后台。 请帮忙...

公共无效loadSheet(布尔输出,字符串projectName){

        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);

有关更多信息,请参阅: https : //stackoverflow.com/a/17367570/976231

更新

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);
        }

    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM