在C#中使用Excel时Microsoft Excell后台进程堆积

时间:2019-06-20 07:31:45

标签: c# office-interop

对于我的应用程序,我正在调用一个excel文件来读取或写入数据,效果很好,但是我确实注意到任务管理器中堆积了“ Microsoft Excell”进程。尽管这似乎并没有影响应用程序,但从长远来看,它将影响我的电脑的速度。

我尝试使用.Quit()方法关闭excell,但这似乎只是退出会话,同时仍将进程留在原处。

这里是我呼叫excell的上下文:

在读取数据时:

public List<string> GetLeverancierInfo(int Index)
        {
            List<string> Output = new List<string>();
            int Positie = 0;
            bool DataGrabbing = true;
            DataSheet DataSheet = new DataSheet(@"C:\Users\Melvin\source\repos\ShopITScanner\Shop-IT FactuurScanner\Properties\Resources\DataFile.xlsx", 1);
            while (DataGrabbing)
            {
                string HuidigeCell = DataSheet.ReadCell(Form1.nieuwBedrijf.BedrijfsIndex, Positie);
                if(HuidigeCell != null)
                {
                    Output.Add(HuidigeCell);
                    Positie++;
                }
                else
                {
                    DataGrabbing = false;
                }
            }
            DataSheet.Exit();
            return Output;
        }

DataSheet.ReadCell()方法如下:

public string ReadCell(int X, int Y)
        {
            X++;
            Y++;
            if(ProductSheet.Cells[X, Y].Value2 != null)
            {
                return ProductSheet.Cells[X, Y].Value2;
            }
            else
            {
                return null;
            }

        }

用于写入Excell的代码:

        public void SetLeverancierInfo(List<string> Attributen)
        {
            DataSheet DataSheet = new DataSheet(@"C:\Users\Melvin\source\repos\ShopITScanner\Shop-IT FactuurScanner\Properties\Resources\DataFile.xlsx", 1);
            int YPositie = 0;
            int XPositie = 0;
            foreach(string Attribuut in Attributen)
            {
                bool Added = false;
                while (!Added)
                {
                    if (DataSheet.ReadCell(XPositie, YPositie) == null)
                    {
                        DataSheet.WriteCell(XPositie, YPositie, Attribuut);
                        Added = true;
                    }
                    else
                    {
                        XPositie++;
                    }
                }


                YPositie++;
            }
            DataSheet.Exit();

        }

DataSheet.WriteCell()的代码如下:

public void WriteCell(int X, int Y, string S)
        {
            X++;
            Y++;
            if(ProductSheet.Cells[X, Y].Value2 == null)
            {
                ProductSheet.Cells[X, Y].Value2 = S;
            }
            else
            {
                if(MessageBox.Show("Met de volgende operatie worden uw instellingen overgeschreven. \nDit kan niet ongedaan gemaakt worden. \nWeet u het zeker?", "Waarschuwing", MessageBoxButtons.YesNo) == DialogResult.Yes)
                {
                    ProductSheet.Cells[X, Y].Value2 = S;
                }
            }
            DataFile.Save();
        }

最后,当我完成对Excell的操作后,我将运行以下命令:

        public void Exit()
        {
            Excel.Quit();
        }

当使用.Quit()方法时,我假设它会摆脱整个excell过程,但实际上并没有发生。我也没有收到错误,只是偶尔出现“文件被另一个进程打开”消息,这在不终止进程时是合乎逻辑的。

0 个答案:

没有答案
相关问题