Member 12708425 Ответов: 1

Сброс datagridview в ms excel.


I have requirement to dump from SQL DB to excel file.There is only one database in SQL and query output in data grid view needs to be dumped in excel sheet.
I have written the following code and used  <pre>Microsoft.Office.Interop.Excel.Application Excel
.
После того, как все содержимое DataGridView успешно сброшено на лист excel, я получаю ошибку, прикрепленную к скриншоту видео.Прикрепление части кода, ответственной за дамп, выглядит следующим образом.
Я новичок в C# и уже давно не могу устранить эту проблему.

Код, используемый для дампа datagridview в excel, выглядит следующим образом.
//Start exporting to excel file.
-------------------------------------------------------------------------------
using Microsoft.Office.Interop.Excel;
        //-------------------------
        private void button2_Click(object sender, EventArgs e)
        {
            /* creating Excel Application
            Microsoft.Office.Interop.Excel._Application app = new Microsoft.Office.Interop.Excel.Application();


            // creating new WorkBook within Excel application
            Microsoft.Office.Interop.Excel._Workbook workbook = app.Workbooks.Add(Type.Missing);


            // creating new Excelsheet in workbook
            Microsoft.Office.Interop.Excel._Worksheet worksheet = null;

            // see the excel sheet behind the program
            app.Visible = false;

            // get the reference of first sheet. By default its name is Sheet1.
            // store its reference to worksheet
            worksheet = workbook.Sheets["Sheet1"];
            worksheet = workbook.ActiveSheet;

            // changing the name of active sheet
            worksheet.Name = "Exported from gridview";


            // storing header part in Excel
            for (int i = 1; i < dataGridView1.Columns.Count + 1; i++)
            {
                worksheet.Cells[1, i] = dataGridView1.Columns[i - 1].HeaderText;
            }
            // storing Each row and column value to excel sheet
            for (int i = 0; i < dataGridView1.Rows.Count - 1; i++)
            {
                for (int j = 0; j < dataGridView1.Columns.Count; j++)
                {
                    worksheet.Cells[i + 2, j + 1] = dataGridView1.Rows[i].Cells[j].Value.ToString();
                }
            }
            //----------------------------------------
            // Save the file
            workbook.SaveAs(("D:\\EXCEL\\AFAS_Report_Created_on_" + DateTime.Now.ToShortDateString() + ".xls"), Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlExclusive, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
            MessageBox.Show("Your export in excel is complete.Please close this excel before createing a new one.");
            
            // Exit from the application
            app.Visible = true;
            app.Quit();===============================*/
            Microsoft.Office.Interop.Excel.Application Excel = new Microsoft.Office.Interop.Excel.Application();
            Workbook wb = Excel.Workbooks.Add(XlSheetType.xlWorksheet);
            Worksheet ws = (Worksheet)Excel.ActiveSheet;
            Excel.Visible = true;
            ws.Cells[1, 1] = "Name of place";
            ws.Cells[1, 2] = "Element Name";
            ws.Cells[1, 3] = "No";
            ws.Cells[1, 4] = "Make Name";
            ws.Cells[1, 5] = "Model name";
            for (int i = 1; i < dataGridView1.Columns.Count + 1; i++)
             {
                 ws.Cells[1, i] = dataGridView1.Columns[i - 1].HeaderText;
             }
             // storing Each row and column value to excel sheet
             for (int i = 0; i < dataGridView1.Rows.Count - 1; i++)
             {
                 for (int j = 0; j < dataGridView1.Columns.Count; j++)
                 {
                     ws.Cells[i + 2, j + 1] = dataGridView1.Rows[i].Cells[j].Value.ToString();
                 }
             }
             int rowCount = ((System.Data.DataTable)this.dataGridView1.DataSource).Rows.Count;
             MessageBox.Show("You have exported " + rowCount.ToString() + " rows.Please close this excel before creating a new one.");
             Excel.Quit();
             }
            //End of dump to excel file.
        //------------------------------

-----------------------------------------------------------------------------------

Это дает,
----------------------------------------------------
Произошло COMException.
При первом же случайном исключении типа ' System. Runtime.InteropServices.COMException ' произошло в mscorlib.dll. Дополнительная информация: исключение из HRESULT:0x800A03EC
-------------------------------------------
Советы по устранению неполадок:
Проверьте свойство error Code для исключения, чтобы определить HRESULT, возвращаемый COM-объектом.
-------------------------------------------------------------------------

Также в задаче управление несколькими экземплярами EXCEL.exe бежит.
Может ли кто-нибудь помочь мне устранить эту проблему?

Что я уже пробовал:

Попробовал из другого кода проект форума и Stack overflow. Есть много сообщений по этому поводу.Но у меня это не сработало.Я тоже новичок в C#.

1 Ответов

Рейтинг:
0

OriginalGriff

Посмотрите на ошибку: она говорит вам, что делать.

COMException occurred.
At first chance exception of type 'System.Runtime.InteropServices.COMException' occurred in mscorlib.dll. Additional information: Exception from HRESULT:0x800A03EC
-------------------------------------------
Troubleshooting tips:
Check the Error Code property pf the exception to determine the HRESULT returned by the COM object.

Поэтому используйте отладчик, посмотрите на объект исключения, когда он возникает, и прочитайте свойство кода ошибки. Это значение HRESULT, возвращаемое Excel, и google для этого (вероятно, в шестнадцатеричном формате) скажет вам, почему Excel отклонил его.
Но быстрая проверка HRESULT:0x800A03EC предполагает, что это проблема с адресом Excel вне диапазона.


Member 12708425

Я много искал с кодом ошибки.Но не получил никакого результата.
Кроме того, я должен запустить этот фрагмент кода в клиентской системе Win 7, из которой я буду запрашивать базу данных SQL, работающую на моей базовой машине сервера Win Server 2008.
Кроме того, я вижу, что в диспетчере задач запущены 3 экземпляра excel.
EXCEL.EXE * 32
EXCEL.EXE * 32
EXCEL.EXE * 32

Как убить это, как только я закончу с запуском приложения.