Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#使用后关闭Excel_C#_Excel - Fatal编程技术网

C#使用后关闭Excel

C#使用后关闭Excel,c#,excel,C#,Excel,我在应用程序中使用Excel作为Com对象。这里有一个代码示例 public void LoadData() { LogHandler logHandler = new LogHandler(Path.GetDirectoryName(FileName) + "\\logfile.log"); string OKATO = GetOKATOFromFileName(); int SubjectId; if (!int

我在应用程序中使用Excel作为Com对象。这里有一个代码示例

    public void LoadData()
    {
        LogHandler logHandler = new LogHandler(Path.GetDirectoryName(FileName) + "\\logfile.log");
        string OKATO = GetOKATOFromFileName();
        int SubjectId;
        if (!int.TryParse(OKATO, out SubjectId))
        {
            logHandler.WriteLogStr("Ошибка определения ОКАТО из имени файла (" + FileName  + ")");
            return;
        }
        int CL;
        DateTime FDate = GetDateFromFileName(out CL);
        Excel.Application excelApp = new Excel.Application();
        Excel.Workbook excelWorkbook = excelApp.Workbooks.Open(FileName,
            0, false, 5, "", "", false, Excel.XlPlatform.xlWindows, "",
            true, false, 0, true, false, false);
        try
        {
            Excel.Sheets excelSheets = excelWorkbook.Worksheets;
            for (int i = 1; i <= excelSheets.Count; i++)
            {
                Excel.Worksheet excelWorksheet = (Excel.Worksheet)excelSheets.get_Item(i);
                LoadDataFromSheet(excelWorksheet, SubjectId, CL, FDate);
                System.Runtime.InteropServices.Marshal.ReleaseComObject(excelWorksheet);
            }
            System.Runtime.InteropServices.Marshal.ReleaseComObject(excelSheets);
        }
        catch (Exception le)
        {
            logHandler.WriteLogStr(le.Message);
        }
        finally
        {
            excelWorkbook.Close(0);
            excelApp.Quit();
            System.Runtime.InteropServices.Marshal.ReleaseComObject(excelWorkbook);
            System.Runtime.InteropServices.Marshal.ReleaseComObject(excelApp);
        }

    }
但事实并非如此。直到程序关闭,Excel才存在于内存中。它只有在关闭我的应用程序后才会退出

如何在关闭应用程序之前关闭Excel进程

p、 我读过这个话题,但没有一个建议适合我


处理完对象后,使用

GC.Collect();
这是我处理Excel对象的方式

        private void releaseObject(object obj)
    {
        try
        {
            System.Runtime.InteropServices.Marshal.ReleaseComObject(obj);
            obj = null;
        }
        catch (Exception ex)
        {
            obj = null;
            MessageBox.Show("Exception Occured while releasing object " + ex.ToString());
        }
        finally
        {
            GC.Collect();
        }
    }

这是否有帮助:您是否使用了这一行
System.Runtime.InteropServices.Marshal.ReleaseComObject(您的comObject)
对于您正在创建的所有对象,例如Excel工作簿、Excel应用程序等。我已为所有com变量添加了Marshal.ReleaseComObject,但Excel仍在内存中。在问题代码示例中进行了更改如果任何对象都不起作用,请使用kill process。检查此URL:
        private void releaseObject(object obj)
    {
        try
        {
            System.Runtime.InteropServices.Marshal.ReleaseComObject(obj);
            obj = null;
        }
        catch (Exception ex)
        {
            obj = null;
            MessageBox.Show("Exception Occured while releasing object " + ex.ToString());
        }
        finally
        {
            GC.Collect();
        }
    }