Посоветуйте что-нибудь для экспорта DataGridView в Excel

boakineo
Дата: 08.01.2010 08:42:32
Нужно экспортировать DataGridView в Excel.
Microsoft.Office.Interop.Excel не предлагать.
i see
Дата: 08.01.2010 11:39:08
ИМХО, разумнее экспортировать не Грид, а его источник данных. Или я чего-то не понимаю?
boakineo
Дата: 08.01.2010 12:04:57
В моем случае нужно грид.
SerP1983
Дата: 08.01.2010 15:39:58
Fatty
Дата: 08.01.2010 18:20:15
boakineo
Нужно экспортировать DataGridView в Excel.
Microsoft.Office.Interop.Excel не предлагать.


Возьми класс Excel отсюда:
/topic/620401&pg=1#6558430
и добавь в него следующую функцию:

       //ЗАПИСЬ ЗНАЧЕНИЯ В ЯЧЕЙКУ\n        public void SetCellValue(int row, int col, string value)\n        {\n            object xlCell = WorkSheet.GetType().InvokeMember("Cells",\n   BindingFlags.GetProperty, null, WorkSheet, new object[] { row, col });\n            xlCell.GetType().InvokeMember("Value",\n                BindingFlags.SetProperty,null, xlCell, new object[] { value });\n        }

В модуле формы добавь:
       // ЭКСПОРТ DataGridView\n public void GridExport(DataGridView dgv, string filename, int sheetnumber)\n        {\n            Excel xlApp = new Excel();\n            xlApp.Visible = true;\n            xlApp.OpenDocument(filename);\n            object xlBook = xlApp.ActiveDocument();\n            object xlSheet = xlApp.ActiveSheet(xlBook, sheetnumber);\n            object[] columndata = new object[dgv.ColumnCount];\n            for (int i = 0; i < dgv.ColumnCount; i++)\n            {\n                xlApp.SetCellValue(1, i + 1, dgv.Rows[0].Cells[i].OwningColumn.Name.ToString());\n\n            }\n\n            for (int i = 0; i < dgv.RowCount - 1; i++)\n            {\n\n                for (int j = 0; j < dgv.ColumnCount; j++)\n                {\n                    xlApp.SetCellValue(i + 2, j + 1, dgv.Rows[i].Cells[j].Value.ToString());\n                }\n            }\n\n            xlApp.CloseDocument();\n            xlApp.Quit();\n            xlApp.Dispose();\n        }

И сам вызов:
            GridExport(this.dataGridView1,\n                @"C:\\Grid.xls", //<-файл существующий\n                2 //<-номер листа\n                );

~\'J\'~
nibo
Дата: 12.01.2010 10:07:03
boakineo
Нужно экспортировать DataGridView в Excel.
Microsoft.Office.Interop.Excel не предлагать.

Самый простой способ, какой можно посоветовать - возьми файл Excel, сохрани его в формате xml, или html. Посмотри его структуру. И потом вручную пиши текст в файл аналогично рассмотренному оформлению, в конце сохраняй как файл Excel. Никакой interop и никакие дотовские классы столь экономичного по памяти и времени выполнения решения не дадут. Была похожая ситуация с отчетом 50 столбцов и 50-60 тысяч строк. ReportingService умер. Interop умер. Net-класс делал запись около полутора часов. А при записи вручную в файл за 20-25 секунд все выполнялось. И естественно, не было сотен мегабайт загруженной памяти, как в случае либого из стандартных методов.