我想获得的数据形成通过这种方式列出一个Excel文件中的列:数据后关闭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;
}
}
的问题是,这个过程EXCEL.EXE
不打烊连我已经尝试过所有的东西来正确地关闭它。我知道在这里发布了许多关于正确结束Excel过程的问题。但我不是专业人士,我已经尝试了几乎所有我能做的事情。 仍然没有运气。
那么,有谁能告诉我这段代码有什么问题吗?当所有数据都存储在列表中时,过程如何关闭一次?
感谢您的回复,是的,我已经使用了'System.Diagnostics.Process'方法来关闭正在运行的进程。但它会关闭进程列表中的所有excel进程。是否有一种方法可以关闭由'new Excel.Application()'启动的唯一进程。 ?? – ygssoni
如果您不介意跟踪正在运行的进程,则可以在开始运行COM之前获取excel进程的列表,然后再开始运行。这会给你与COM对象相关的进程,而不会太混乱。你只需要确保你不会在单独的线程上启动2个或更多的COM实例,否则这种技术将无法工作。 –
Ohk,听起来不错。如果我没有得到任何直接或短的方法,我会肯定地尝试。谢谢!:) – ygssoni