获取数据后关闭EXCEL应用程序进程

ygs*_*oni 2 c# excel process

我正在尝试通过以下方式从列表中的 Excel 文件获取列数据:

private void Form1_Load(object sender, EventArgs e)
        {
            Excel.Application xlApp = new Excel.Application();
            Excel.Workbook xlWorkbook = xlApp.Workbooks.Open(@"D:/test.xlsx");
            Excel.Worksheet xlWorksheet = xlWorkbook.Sheets[1];
            Excel.Range xlRange = xlWorksheet.UsedRange;

            int rowCount = xlRange.Rows.Count;
            int colCount = xlRange.Columns.Count;

            List<string> FirstColumnValues = new List<string>();
            List<string> SecondColumnValues = new List<string>();

            for (int row=1; row <= rowCount; row++)
            {
                for (int col = 1; col <= colCount; col++)
                {
                    switch (col)
                    {
                        case 1:
                            FirstColumnValues.Add(xlRange.Cells[row, col].Value2.ToString());
                            break;
                        case 2:
                            SecondColumnValues.Add(xlRange.Cells[row, col].Value2.ToString());
                            break;
                    }
                }
            }

            if (FirstColumnValues.Count != 0 && SecondColumnValues.Count != 0)
            {
                xlWorkbook.Close();
                xlApp.Quit();
                MessageBox.Show("Completed");
                Marshal.ReleaseComObject(xlRange);
                Marshal.ReleaseComObject(xlWorksheet);
                Marshal.ReleaseComObject(xlWorkbook);
                Marshal.ReleaseComObject(xlApp);
                xlApp = null;
            }
        }
Run Code Online (Sandbox Code Playgroud)

问题是,EXCEL.EXE即使我尝试了所有方法来正确关闭该进程,该进程也没有关闭。我知道这里有很多关于正确关闭 Excel 进程的问题。但我不是专业人士,我已经尝试了几乎所有我能做的事情。还是没有运气。

那么,有人可以告诉我这段代码有什么问题吗?当所有数据都存储在列表中时,如何关闭一次进程?

Lif*_*ift 6

我知道这个问题已经得到解答,但我想我会分享我在尝试解决同一问题时发现的内容。希望有人会发现这很有用。这是在 vb.net 中,但我确信它可以被翻译。

Dim proc As System.Diagnostics.Process
        For Each proc In System.Diagnostics.Process.GetProcessesByName("EXCEL")
            If proc.MainWindowTitle.ToString = "" Then
                proc.Kill()
            End If
        Next
Run Code Online (Sandbox Code Playgroud)

我发现当我通过应用程序打开 Excel 文件时,窗口标题为空,因此我没有关闭每个正在运行的 Excel 进程,而是关闭了没有标题的进程。