2011-02-23 3 views
3

재사용 가능한 라이브러리에서 어떻게 든 더 쉽게 사용할 수 있도록 Excel Interop의 사용을 캡슐화하려고합니다.Excel Interop : Excel 응용 프로그램 인스턴스를 종료하면 테스트가 실패합니까?

지금까지 필자는 각 테스트 사이를 제외하고는 모두 잘 작동하는 몇 가지 테스트를 작성했습니다. Excel을 강제로 삭제해야 테스트 파일에서 더 이상 처리 할 수 ​​없도록했습니다.

내 각 시험 후 사이에 응용 프로그램 인스턴스를 종료하면

는, 엑셀 Windows가

"엑셀의 작동이 중지되었습니다 및 솔루션을 찾고있다"

를 표시하는 원인이 응답하지 않는 것으로 보인다

메시지입니다. 이 메시지는 한편 엑셀

같은 예외를 던져 발생하는 파일 내 테스트에 걸림의 원인이 폐쇄되고 몇 초 동안 지속 "다른 프로세스에서 사용하고 있기 때문에 파일을 액세스 할 수 없습니다 ...

메시지입니다. 그렇지 않으면 각 테스트가 개별적으로 실행됩니다.

이 문제를 해결하는 방법에 대한 단서가 있습니까?

ApplicationClass.Quit() 방법을 과도하게 사용합니까?

테스트가 내 테스트를 통과 한 후에 만 ​​Excel을 종료하면 테스트 목적으로 생성 된 파일이 삭제되지 않습니다.

감사합니다. =)

답변

2

Workbook을 변경 한 경우 "변경 사항을 저장 하시겠습니까?" 대화를하는 대화가 있습니다. 응용 프로그램을 종료하기 전에 _Workbook.Saved 속성을 True으로 설정할 수 있습니다. 자세한 내용은 here을 참조하십시오.

+0

+1 이전에는 생각할 수 없었습니다. 고마워요 barrowc! =) –

1

"다른 프로세스에서 사용 중이므로 파일에 액세스 할 수 없습니다 ..."라는 문제가 발생했습니다.

워크 시트를 저장하려고 했으므로 작업 책을 저장해야합니다. 전체 예제가 있습니다.

private void TestCreateExcel(IEnumerable<Sales1> data) 
    { 
     var excelApp = new Excel.Application(); 
     var workBook = excelApp.Workbooks.Add(); 
     Excel._Worksheet workSheet = excelApp.ActiveSheet; 

     workSheet.Cells[1, "A"] = "Title"; 
     workSheet.Cells[1, "B"] = "Author(s)"; 
     workSheet.Cells[1, "C"] = "Release Date"; 
     workSheet.Cells[1, "D"] = "Total Books Sold"; 
     workSheet.Cells[1, "E"] = "Last 30 Days Sales"; 
     workSheet.Cells[1, "F"] = "Average Sales Per Month"; 
     workSheet.Cells[1, "G"] = "Starting Advance"; 
     workSheet.Cells[1, "H"] = "Current Advance"; 

     int index = 1; //Keep track of the which row we're writing to. 
     foreach (var n in data) 
     { 
      index++; 
      workSheet.Cells[index, "A"] = n.Title; 
      workSheet.Cells[index, "B"] = n.Author; 
      workSheet.Cells[index, "C"] = n.ReleaseDate.ToShortDateString(); 
      workSheet.Cells[index, "D"] = n.TotalBooksSold; 
      workSheet.Cells[index, "E"] = n.Last30DaysSales; 
      workSheet.Cells[index, "F"] = n.AverageSalesPerMonth; 
      workSheet.Cells[index, "G"] = n.StartingAdvance; 
      workSheet.Cells[index, "H"] = n.CurrentAdvance; 
     } 

     workBook.SaveAs(Server.MapPath(filePath + fileName)); 
     excelApp.Quit(); 
    }