【问题标题】:Release excel instances [duplicate]发布excel实例[重复]
【发布时间】:2013-04-25 15:21:01
【问题描述】:

如何释放为我的以下代码创建的 excel 实例?杀死 excel 实例。

Excel.Workbook Workbook1 = xCel.Workbooks.Open(ExcelFilePath);                
Excel.Workbook Workbook2 = xCel.Workbooks.Add();

foreach (Excel.Worksheet dummysheet in Workbook1.Worksheets)
{                 
  dummysheet.Copy(Workbook2.Worksheets[1],Type.Missing);
}
Workbook2.SaveAs(strFileCopyPath);

//释放excel实例的代码

if (sourceWorkbook != null)
                {                   
                    sourceWorkbook = null;
                    destinationWorkbook = null;
                    Thread.Sleep(500);
                }
                if (status.ProcessID > 0)
                 {                    
                    Process p = Process.GetProcessById(status.ProcessID);
                    p.Kill();
                 }

                GC.Collect();
                GC.WaitForPendingFinalizers();
                GC.Collect();
                GC.WaitForPendingFinalizers();

                try { Marshal.FinalReleaseComObject(sourceWorkbook); }
                catch { }
                try { Marshal.FinalReleaseComObject(destinationWorkbook); }
                catch { } 

请检查是否正确。

我知道这是重复的,我只是要求你们检查这是否正确。

【问题讨论】:

  • 也许在这里看看答案 - stackoverflow.com/q/9581689/2065121
  • 在使用互操作对象时,每行不要使用多个点。所以像这样:ES.oXL.Workbooks.Open(ExcelFilePath) 不幸的是需要分成 4 行。这在@TimSchmelter 评论中的链接中进行了解释

标签: c#


【解决方案1】:

可以使用以下:

GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();
GC.WaitForPendingFinalizers();

【讨论】:

  • @Filburt OP 在这篇文章之后编辑了他的问题。
  • 好吧,我的错……我刚查了历史,自己编辑时错过了用户编辑
  • 没关系,谢谢分号。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-22
  • 2015-08-05
  • 1970-01-01
  • 2019-09-12
  • 1970-01-01
相关资源
最近更新 更多