Solved

Strange Problem getting Excel Process To Quit`

Posted on 2006-07-12
6
551 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
  • 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
How to run any project with ease

Manage projects of all sizes how you want. Great for personal to-do lists, project milestones, team priorities and launch plans.
- Combine task lists, docs, spreadsheets, and chat in one
- View and edit from mobile/offline
- Cut down on emails

 
LVL 96

Accepted Solution

by:
Bob Learned earned 500 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

How to run any project with ease

Manage projects of all sizes how you want. Great for personal to-do lists, project milestones, team priorities and launch plans.
- Combine task lists, docs, spreadsheets, and chat in one
- View and edit from mobile/offline
- Cut down on emails

Join & Write a Comment

Introduction                                                 Was the var keyword really only brought out to shorten your syntax? Or have the VB language guys got their way in C#? What type of variable is it? All will be revealed.   Also called…
This article describes a simple method to resize a control at runtime.  It includes ready-to-use source code and a complete sample demonstration application.  We'll also talk about C# Extension Methods. Introduction In one of my applications…
Get a first impression of how PRTG looks and learn how it works.   This video is a short introduction to PRTG, as an initial overview or as a quick start for new PRTG users.
This video demonstrates how to create an example email signature rule for a department in a company using CodeTwo Exchange Rules. The signature will be inserted beneath users' latest emails in conversations and will be displayed in users' Sent Items…

747 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

Need Help in Real-Time?

Connect with top rated Experts

13 Experts available now in Live!

Get 1:1 Help Now