2017-08-10 83 views
0
public static void GenerateExcel() 
    { 
     string conString = @"Server=DESKTOP-QVPUIDU\SQLEXPRESS; Database=Erasmus_Students;Integrated Security = SSPI;"; 
     StringBuilder query = new StringBuilder(); 
     query.Append("select * from ErasmusStudent"); 

     SQL.DataTable dtProducts = new SQL.DataTable(); 
     using (SqlConnection cn = new SqlConnection(conString)) 
     { 
      using (SqlDataAdapter da = new SqlDataAdapter(query.ToString(), cn)) 
      { 
       da.Fill(dtProducts); 
      } 
     } 


     Excel._Workbook oWB; 
     Excel._Worksheet oSheet; 
     Excel.Application oXL; 

     oXL = new Application(); 
     oWB = oXL.Workbooks.Add(Missing.Value); 
     oSheet = (_Worksheet)oWB.ActiveSheet; 
     oSheet = (_Worksheet)oXL.Worksheets.Add(); 
     oSheet.Name = "Erasmus"; 


     try 
     { 
      SQL.DataTable dtCategories = dtProducts.DefaultView.ToTable(true, "FirstName"); 

      foreach (SQL.DataRow category in dtCategories.Rows) 
      { 

       string[] colNames = new string[dtProducts.Columns.Count]; 

       int col = 0; 

       foreach (SQL.DataColumn dc in dtProducts.Columns) 
        colNames[col++] = dc.ColumnName; 
       string lastColumn = "A"; 
       if (dtProducts.Columns.Count > 25) 
        lastColumn += (char)(65 + dtProducts.Columns.Count - 1);      
       else 
        lastColumn = Convert.ToString((char)(65 + dtProducts.Columns.Count - 1)); 

       oSheet.get_Range("A1", lastColumn + "1").Value2 = colNames; 
       oSheet.get_Range("A1", lastColumn + "1").Font.Bold = true; 
       oSheet.get_Range("A1", lastColumn + "1").VerticalAlignment = Excel.XlVAlign.xlVAlignCenter; 

       SQL.DataRow[] dr = dtProducts.Select(string.Format("FirstName='{0}'", category[0].ToString())); 

       string[,] rowData = new string[dr.Count<SQL.DataRow>(), dtProducts.Columns.Count]; 

       int rowCnt = 0; 
       int redRows = 2; 
       foreach (SQL.DataRow row in dr) 
       { 
        for (col = 0; col < dtProducts.Columns.Count; col++) 
        { 
         rowData[rowCnt, col] = row[col].ToString(); 
        } 

        /*if (int.Parse(row["ReorderLevel"].ToString()) < int.Parse(row["UnitsOnOrder"].ToString())) 
        { 
         Range range = oSheet.get_Range("A" + redRows.ToString(), "J" + redRows.ToString()); 
         range.Cells.Interior.Color = System.Drawing.Color.Red; 
        } */ 
        redRows++; 
        rowCnt++; 
       } 
       oSheet.get_Range("A2", lastColumn + rowCnt.ToString()).Value2 = rowData; 
      } 

      oXL.DisplayAlerts = false; 
      oWB.SaveAs("Erasmus.xlsx"); 
      oWB.Close(0); 
      oXL.Quit(); 
      SendEmail(); 



     } 
     catch (Exception ex) 
     { 
      Console.WriteLine(ex.Message); 
     } 
     finally 
     { 
      Marshal.ReleaseComObject(oSheet); 
      Marshal.ReleaseComObject(oWB); 
      Marshal.ReleaseComObject(oXL); 
     } 
    } 

所以問題是,我每次運行構建一個Excel的過程不關閉我完成了我的一天30-40打開過程,現在我意識到這一點。 我試圖關閉與退出和關閉文件,也試圖釋放它與元帥我目前出來的想法。 歡迎任何建議/代碼改進。Excel過程拒絕關閉

Open processes

+0

獲取excel'PID'並運行'taskkill'命令。 – tchelidze

+0

我在想這個,但我聽說這不是一個好的選擇(我不知道更多的細節) – ATudor

回答

0

我可能會從有一個答案,但我最後一次見到這種行爲是到目前爲止,它是計算機反病毒阻擋一切。也許嘗試禁用它並運行你的應用程序?

此外,也許這可以幫助嗎? I can't kill MyApp.vshost.exe