Excel активность для просмотра - PullRequest
1 голос
/ 20 сентября 2010

Я использую следующий код для создания файла Excel с использованием Microsoft.Interop.Excel.Проблема в том, что я действительно вижу генерацию рабочей книги, когда код выполняется, документ Excel открывается на экране, и документ начинает заполняться данными.Можно ли это как-то сделать в фоновом режиме?

Спасибо

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);
                }
            }

1 Ответ

2 голосов
/ 20 сентября 2010

Ваш код читает:

 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;

Оставьте это.Он останется невидимым.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...