Click here to Skip to main content
16,012,153 members
Please Sign up or sign in to vote.
4.00/5 (1 vote)
See more:
C#
Microsoft.Office.Interop.Excel._Application app = new Microsoft.Office.Interop.Excel.Application();
Microsoft.Office.Interop.Excel._Workbook workbook = app.Workbooks.Add(Type.Missing);
Microsoft.Office.Interop.Excel._Worksheet worksheet1 = null;
//Microsoft.Office.Interop.Excel._Worksheet worksheet2 = null;
app.Visible = true;
worksheet1 = workbook.Sheets["Sheet1"];
worksheet1 = workbook.ActiveSheet;
Marshal.ReleaseComObject(workbook);
Marshal.ReleaseComObject(worksheet1);

worksheet1.Cells[1, 1] = "รางงานการจัดการโครงการโดยการใช้ Program evaluation and review technique";
worksheet1.Cells[3, 2] = "ตารางแสดงค่าต่างๆของกิจกรรมแต่ละตัวในโครงการนี้";
Excel.Range Chartrange = Chartrange = worksheet1.get_Range("A1", "A1"); ;
Chartrange.Font.Bold = true;
GC.Collect();
Marshal.ReleaseComObject(Chartrange);
//GC.Collect();



for (int i = 1; i < 7 + 1; i++)
{
    worksheet1.Cells[5, i] = dataGridView1.Columns[i - 1].HeaderText;
    Excel.Range kk = worksheet1.get_Range("A5","G5");
    Excel.Borders borders = kk.Borders;
    borders.LineStyle = Excel.XlLineStyle.xlContinuous;
    borders.Weight = 3d;
    GC.Collect();
    Marshal.ReleaseComObject(borders);
    Marshal.ReleaseComObject(kk);

}
for (int i = 0; i < dataGridView1.Rows.Count - 1; i++)
{
    for (int j = 0; j < 7; j++)
    {
        int excel_cell = dataGridView1.Rows.Count - 1 + 5;
        if (dataGridView1.Rows[i].Cells[j].Value != null)
        {
            int k = i + 6;
            worksheet1.Cells[i + 6, j + 1] = dataGridView1.Rows[i].Cells[j].Value.ToString();
            Excel.Range kk = worksheet1.get_Range("A" + k, "G" + k);
            Excel.Borders borders = kk.Borders;
            borders.LineStyle = Excel.XlLineStyle.xlContinuous;
            borders.Weight = 3d;
            GC.Collect();
            Marshal.ReleaseComObject(borders);
            Marshal.ReleaseComObject(kk);
            //GC.Collect();
            //GC.WaitForPendingFinalizers();
        }
        else
        {
            worksheet1.Cells[i + 2, j + 1] = "";
        }
    }
}


anyone know how to kill process EXCEL.EXE it keep running when i close everything :(
i have try many thing like Marshel.releaseComObject(worksheet1)
app = null; help please
Thax for you answer
Posted

Pease Try this Code it releases everything

public void ExcelMethod()
       {
           Microsoft.Office.Interop.Excel._Application app = new Microsoft.Office.Interop.Excel.Application();
           Microsoft.Office.Interop.Excel._Workbook workbook = app.Workbooks.Add(Type.Missing);
           Microsoft.Office.Interop.Excel._Worksheet worksheet1 = null;

           try
           {
               //Microsoft.Office.Interop.Excel._Worksheet worksheet2 = null;
               app.Visible = true;
               worksheet1 = workbook.Sheets["Sheet1"];
               worksheet1 = workbook.ActiveSheet;
               Marshal.ReleaseComObject(workbook);
               Marshal.ReleaseComObject(worksheet1);

               worksheet1.Cells[1, 1] = "รางงานการจัดการโครงการโดยการใช้ Program evaluation and review technique";
               worksheet1.Cells[3, 2] = "ตารางแสดงค่าต่างๆของกิจกรรมแต่ละตัวในโครงการนี้";
               Microsoft.Office.Interop.Excel.Range Chartrange = Chartrange = worksheet1.get_Range("A1", "A1");
               ;
               Chartrange.Font.Bold = true;
               GC.Collect();
               Marshal.ReleaseComObject(Chartrange);
               //GC.Collect();



               for (int i = 1; i < 7 + 1; i++)
               {
                   worksheet1.Cells[5, i] = dataGridView1.Columns[i - 1].HeaderText;
                   Microsoft.Office.Interop.Excel.Range kk = worksheet1.get_Range("A5", "G5");
                   Microsoft.Office.Interop.Excel.Borders borders = kk.Borders;
                   borders.LineStyle = Microsoft.Office.Interop.Excel.XlLineStyle.xlContinuous;
                   borders.Weight = 3d;
                   GC.Collect();
                   Marshal.ReleaseComObject(borders);
                   Marshal.ReleaseComObject(kk);

               }
               for (int i = 0; i < dataGridView1.Rows.Count - 1; i++)
               {
                   for (int j = 0; j < 7; j++)
                   {
                       int excel_cell = dataGridView1.Rows.Count - 1 + 5;
                       if (dataGridView1.Rows[i].Cells[j].Value != null)
                       {
                           int k = i + 6;
                           worksheet1.Cells[i + 6, j + 1] = dataGridView1.Rows[i].Cells[j].Value.ToString();
                           Microsoft.Office.Interop.Excel.Range kk = worksheet1.get_Range("A" + k, "G" + k);
                           Microsoft.Office.Interop.Excel.Borders borders = kk.Borders;
                           borders.LineStyle = Microsoft.Office.Interop.Excel.XlLineStyle.xlContinuous;
                           borders.Weight = 3d;
                           GC.Collect();
                           Marshal.ReleaseComObject(borders);
                           Marshal.ReleaseComObject(kk);
                           //GC.Collect();
                           //GC.WaitForPendingFinalizers();
                       }
                       else
                       {
                           worksheet1.Cells[i + 2, j + 1] = "";
                       }
                   }
               }
           }
           finally
           {
               releaseObject(workbook);
               releaseObject(worksheet1);

               if (app != null)
               {
                   app.Quit();

               }
               releaseObject(app);
           }
       }

       private void releaseObject(object obj)
       {
           if (obj != null && Marshal.IsComObject(obj))
           {
               Marshal.ReleaseComObject(obj);
           }
           obj = null;
       }
 
Share this answer
 
In order to release excel object you need to close workbook object , quit application object and release each com object that us while creating excel file.


please refer link

Releasing Excel after using Interop[^]
 
Share this answer
 
You need to close and release the resources after modifying it.
you need to use try finally block and in finally block call app.Quit() method.

C#
public void ExcelMethod()
        {
            Microsoft.Office.Interop.Excel._Application app = new Microsoft.Office.Interop.Excel.Application();
            Microsoft.Office.Interop.Excel._Workbook workbook = app.Workbooks.Add(Type.Missing);
            Microsoft.Office.Interop.Excel._Worksheet worksheet1 = null;
 
            try
            {
                //Microsoft.Office.Interop.Excel._Worksheet worksheet2 = null;
                app.Visible = true;
                worksheet1 = workbook.Sheets["Sheet1"];
                worksheet1 = workbook.ActiveSheet;
                Marshal.ReleaseComObject(workbook);
                Marshal.ReleaseComObject(worksheet1);
 
                worksheet1.Cells[1, 1] = "รางงานการจัดการโครงการโดยการใช้ Program evaluation and review technique";
                worksheet1.Cells[3, 2] = "ตารางแสดงค่าต่างๆของกิจกรรมแต่ละตัวในโครงการนี้";
                Microsoft.Office.Interop.Excel.Range Chartrange = Chartrange = worksheet1.get_Range("A1", "A1");
                ;
                Chartrange.Font.Bold = true;
                GC.Collect();
                Marshal.ReleaseComObject(Chartrange);
                //GC.Collect();

 

                for (int i = 1; i < 7 + 1; i++)
                {
                    worksheet1.Cells[5, i] = dataGridView1.Columns[i - 1].HeaderText;
                    Microsoft.Office.Interop.Excel.Range kk = worksheet1.get_Range("A5", "G5");
                    Microsoft.Office.Interop.Excel.Borders borders = kk.Borders;
                    borders.LineStyle = Microsoft.Office.Interop.Excel.XlLineStyle.xlContinuous;
                    borders.Weight = 3d;
                    GC.Collect();
                    Marshal.ReleaseComObject(borders);
                    Marshal.ReleaseComObject(kk);
 
                }
                for (int i = 0; i < dataGridView1.Rows.Count - 1; i++)
                {
                    for (int j = 0; j < 7; j++)
                    {
                        int excel_cell = dataGridView1.Rows.Count - 1 + 5;
                        if (dataGridView1.Rows[i].Cells[j].Value != null)
                        {
                            int k = i + 6;
                            worksheet1.Cells[i + 6, j + 1] = dataGridView1.Rows[i].Cells[j].Value.ToString();
                            Microsoft.Office.Interop.Excel.Range kk = worksheet1.get_Range("A" + k, "G" + k);
                            Microsoft.Office.Interop.Excel.Borders borders = kk.Borders;
                            borders.LineStyle = Microsoft.Office.Interop.Excel.XlLineStyle.xlContinuous;
                            borders.Weight = 3d;
                            GC.Collect();
                            Marshal.ReleaseComObject(borders);
                            Marshal.ReleaseComObject(kk);
                            //GC.Collect();
                            //GC.WaitForPendingFinalizers();
                        }
                        else
                        {
                            worksheet1.Cells[i + 2, j + 1] = "";
                        }
                    }
                }
            }
            finally
            {
                releaseObject(workbook);
                releaseObject(worksheet1);
 
                if (app != null)
                {
                    app.Quit();
 
                }
                releaseObject(app);
            }
        }
 
        private void releaseObject(object obj)
        {
            if (obj != null && Marshal.IsComObject(obj))
            {
                Marshal.ReleaseComObject(obj);
            }
            obj = null;
        }
[Agent_Spock]
- Added missing code brackets
[Jafarinejajadvazifehkhorani]
-I added one more solution to this question that I mustn't have done it, I should have updated the current answer.
 
Share this answer
 
v6
Comments
Real_Criffer 19-Jun-14 7:27am    
i really don't understand i try finally after the code above but i can' find app, workbook and worksheet ? i am a beginner so if it a stupid answer i am sorry but i reall don't know
Jafarinejadvazifehkhorani 19-Jun-14 8:57am    
the answer is updated
Real_Criffer 19-Jun-14 9:52am    
it still process Sir. i don't know why
Jafarinejadvazifehkhorani 20-Jun-14 9:25am    
Thanks Agent-Spock for adding brackets :)

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900