我想獲得的數據形成通過這種方式列出一個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