对于我的应用程序,我正在调用一个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过程,但实际上并没有发生。我也没有收到错误,只是偶尔出现“文件被另一个进程打开”消息,这在不终止进程时是合乎逻辑的。