Click here to Skip to main content
15,894,405 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

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 :)
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
 
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
 

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