2010-09-20 5 views
1

J'utilise le code suivant pour générer un fichier Excel à l'aide de Microsoft.Interop.Excel. Le problème est que je peux réellement voir la génération du classeur, quand le code est exécuté, un document Excel est ouvert sur l'écran et le doc commence à remplir avec des données. Cela peut-il être fait en quelque sorte en arrière-plan?L'activité Excel est visible

Merci

Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application(); 
      xlApp.Visible = false; 


      if (xlApp == null) 
      { 
       MessageBox.Show("EXCEL could not be started. Check that your office installation and project references are correct."); 
       return false; 
      } 
      xlApp.Visible = true; 

      Workbook wb = xlApp.Workbooks.Add(XlWBATemplate.xlWBATWorksheet); 

      try 
      { 

       if (details != false) 
       { 
        //Workbook wb = xlApp.Workbooks.Add(XlWBATemplate.xlWBATWorksheet); 
        wb.Worksheets.Add(); 
        Worksheet detailsWs = (Worksheet)wb.Worksheets[2]; 

        for (int i = 0; i < dt.Columns.Count; i++) 
        { 
         detailsWs.Cells[1, i + 1] = dt.Columns[i].Caption; 
        } 

       } 

       Worksheet ws = (Worksheet)wb.Worksheets[1]; 
       if (ws == null) 
       { 
        MessageBox.Show("Worksheet could not be created. Check that your office installation and project references are correct."); 
       } 
       for (int i = 0; i < dt.Columns.Count; i++) 
       { 
        ws.Cells[1, i + 1] = dt.Columns[i].Caption; 
       } 
       for (int i = 0; i < dt.Rows.Count; i++) 
       { 
        for (int j = 0; j < dt.Columns.Count; j++) 
        { 
         ws.Cells[i + 2, j + 1] = dt.Rows[i].ItemArray[j]; 
        } 
        worker.ReportProgress((i * 100)/dt.Rows.Count); 
       } 




       wb.SaveAs(filename, XlFileFormat.xlWorkbookNormal, Type.Missing, Type.Missing, Type.Missing, Type.Missing, XlSaveAsAccessMode.xlShared, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing); 
       wb.Close(true, filename); 

       return true; 
      } 
      catch (Exception ex) 
      { 
       throw ex; 
      } 
      finally 
      { 
       // Cleanup 
       GC.Collect(); 
       GC.WaitForPendingFinalizers(); 

       GC.Collect(); 
       GC.WaitForPendingFinalizers(); 



       if (wb != null) 
       { 
        wb.Close(Type.Missing, Type.Missing, Type.Missing); 
        Marshal.FinalReleaseComObject(wb); 
       } 

       if (xlApp != null) 
       { 
        xlApp.Quit(); 
        Marshal.FinalReleaseComObject(xlApp); 
       } 
      } 

Répondre

2

Votre code est ainsi libellé:

xlApp.Visible = false; 


if (xlApp == null) 
    { 
     MessageBox.Show("EXCEL could not be started. Check that your office installation and project references are correct."); 
     return false; 
    } 

vous écrire:

xlApp.Visible = true; 

Laissez cela. Il restera non visible.

Questions connexes