?
Solved

Strange Problem getting Excel Process To Quit`

Posted on 2006-07-12
6
Medium Priority
?
559 Views
Last Modified: 2008-01-09
Hello,

I am working on an application that converts a set of .CSV files to a .XLS workbook.  It does this by opening the first csv with Excel, and then opening each additional .CSV and moving it into the existing workbook.  The problem that I am having is that after the conversion is done, and all Excel objects are released, the Excel process stays running.  Below are some sections of my code.

Excel.Application excelApp = new Excel.Application();

Excel.Workbook workbook;
Excel.Workbooks workbooks;
Excel.Workbooks tempWorkbooks;

workbooks = (Excel.Workbooks)excelApp.Workbooks;
tempWorkbooks = (Excel.Workbooks)excelApp.Workbooks;

// Open the text file in Excel.
workbooks._OpenText(sourcePath, Excel.XlPlatform.xlWindows, 1,
      Excel.XlTextParsingType.xlDelimited, Excel.XlTextQualifier.xlTextQualifierDoubleQuote,
      false, true, false, false, false, false, missingParameter, missingParameter,
      missingParameter, missingParameter, missingParameter);


workbook = excelApp.Workbooks[1];

for (int i = 2; i <= fileCount; i++)
{
   tempWorkbooks._OpenText(sourcePath + fileBase + i.ToString() + CSVExtension, Excel.XlPlatform.xlWindows, 1,                  Excel.XlTextParsingType.xlDelimited,Excel.XlTextQualifier.xlTextQualifierDoubleQuote,
      false, true, false, false, false, false, missingParameter, missingParameter,missingParameter,  missingParameter,missingParameter);
                              
                                    
//move the opened sheet to the main WB
((Excel.Worksheet)excelApp.Workbooks[2].Worksheets[1]).Move(Type.Missing, excelApp.Workbooks[1].Worksheets[excelApp.Workbooks[1].Worksheets.Count]);
}

I have read several posts and have tried every method for releasing the COM objects.  What is really strange is that everything works fine and the process is killed if I have the above for loop commented out.  This makes it seem like it is a problem in one of 2 the function calls under the for loop, but it will fail regardless of whether the code in the for loop is executed.  For example, if there is only one .csv file, the for loop will not execute, but the process will stay running.  In the same scenario with the loop commented out, the process dies.

?????
Thanks,
Tim
0
Comment
Question by:Tim_Heldberg
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 4
  • 2
6 Comments
 
LVL 96

Expert Comment

by:Bob Learned
ID: 17093242
// Tell COM to release resources.
System.Runtime.InteropServices.Marshal.ReleaseComObject(excelApp);
System.Runtime.InteropServices.Marshal.ReleaseComObject(workbooks);
System.Runtime.InteropServices.Marshal.ReleaseComObject(tempWorkbooks);

// Force garbage collection
GC.Collect();

Bob
0
 
LVL 96

Expert Comment

by:Bob Learned
ID: 17093257
Oops, almost forgot:

// Close the application
excelApp.Quit();

// Tell COM to release resources.
System.Runtime.InteropServices.Marshal.ReleaseComObject(excelApp);
System.Runtime.InteropServices.Marshal.ReleaseComObject(workbooks);
System.Runtime.InteropServices.Marshal.ReleaseComObject(tempWorkbooks);

// Force garbage collection
GC.Collect();

Bob
0
 
LVL 4

Author Comment

by:Tim_Heldberg
ID: 17093402
I actually did try that.  Here is my COM release code

workbook.Close(false, missingParameter, missingParameter);

excelApp.Quit();
workbooks.Close();

while (System.Runtime.InteropServices.Marshal.ReleaseComObject(workbook) > 0) { }
while(System.Runtime.InteropServices.Marshal.ReleaseComObject(workbooks)>0){}
while(System.Runtime.InteropServices.Marshal.ReleaseComObject(tempWorkbooks)>0){}
while (System.Runtime.InteropServices.Marshal.ReleaseComObject(excelApp) > 0) { }
                        
GC.Collect();
0
Technology Partners: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
LVL 96

Accepted Solution

by:
Bob Learned earned 1500 total points
ID: 17093703
Yeah, didn't notice the remark in the question body.  Sounds like some resource is being still not being released, but I can't see what that would be.  It might be something internal to the _OpenText call.

Bob
0
 
LVL 4

Author Comment

by:Tim_Heldberg
ID: 17093760
Well, I was able to figure it out, although it really doesnt seem like much of a fix.  I moved that for loop in question to a seperate function and it worked perfectly.  So strange.  Any idea why that would make a difference?
0
 
LVL 96

Expert Comment

by:Bob Learned
ID: 17093815
Which function?  The class destructor?

Bob
0

Featured Post

Independent Software Vendors: We Want Your Opinion

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

We all know that functional code is the leg that any good program stands on when it comes right down to it, however, if your program lacks a good user interface your product may not have the appeal needed to keep your customers happy. This issue can…
This article aims to explain the working of CircularLogArchiver. This tool was designed to solve the buildup of log file in cases where systems do not support circular logging or where circular logging is not enabled
In this video we outline the Physical Segments view of NetCrunch network monitor. By following this brief how-to video, you will be able to learn how NetCrunch visualizes your network, how granular is the information collected, as well as where to f…
In this video, Percona Solutions Engineer Barrett Chambers discusses some of the basic syntax differences between MySQL and MongoDB. To learn more check out our webinar on MongoDB administration for MySQL DBA: https://www.percona.com/resources/we…
Suggested Courses

752 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question