WinForm下如何把dataGridView中的数据导出到Excel中?开发环境:Visual Studio 2005,使用C#语言。  或者把DataSet中的数据导出到Excel中也可以。
俺是新手,刚用VS2005一个星期,请大家帮忙,谢谢。

解决方案 »

  1.   

    /// <summary>
            /// 将DataGrid中的数据导入Excel中,并显示Excel应用程序,        /// 注意调用该方法必须有安装Excel 2000应用程序,并且假定DataGrid中绑定的是一DataSet
            /// </summary>
            /// <param name="grid"></param>
            /// <param name="ReportTitle"></param>
            public static void ExportDataGridToExcel(DataGrid grid,string ReportTitle)
            {
                DataTable myTable = ((DataSet)grid.DataSource).Tables[0];            try
                {
                    Excel.Application xlApp = new Excel.ApplicationClass();                int rowIndex;
                    int colIndex;                rowIndex = 2;
                    colIndex = 0;                Excel.Workbook xlBook =xlApp.Workbooks.Add(true);                                if (grid.TableStyles.Count >0 ) 
                    {
                        Excel.Range range = xlApp.get_Range(xlApp.Cells[1,1],xlApp.Cells[1,grid.TableStyles[0].GridColumnStyles.Count]);
                        range.MergeCells = true;
                        xlApp.ActiveCell.FormulaR1C1  = ReportTitle;
                        xlApp.ActiveCell.Font.Size  = 18;
                        xlApp.ActiveCell.Font.Bold = true;                     foreach(DataGridColumnStyle colu in grid.TableStyles[0].GridColumnStyles)
                        {
                            colIndex=colIndex +1;
                            xlApp.Cells[2,colIndex] = colu.HeaderText ;
                        }                    //得到的表所有行,赋值给单元格                    for (int row = 0;row < myTable.Rows.Count;row++)
                        {
                            rowIndex = rowIndex + 1;
                            colIndex = 0;
                            for (int col=0;col<grid.TableStyles[0].GridColumnStyles.Count;col++)
                            {
                                colIndex = colIndex + 1;
                                xlApp.Cells[rowIndex, colIndex] = grid[row,col].ToString();
                            }                    
                        }
                    }
                    else
                    { 
                        Excel.Range range = xlApp.get_Range(xlApp.Cells[1,1],xlApp.Cells[1,myTable.Columns.Count]);
                        range.MergeCells = true;
                        xlApp.ActiveCell.FormulaR1C1  = ReportTitle;
                        xlApp.ActiveCell.Font.Size  = 18;
                        xlApp.ActiveCell.Font.Bold = true;
                        
                        //将表中的栏位名称填到Excel的第一行                    foreach(DataColumn Col in myTable.Columns)
                        {
                            colIndex = colIndex + 1;
                            xlApp.Cells[2, colIndex] = Col.ColumnName;                
                        }                    //得到的表所有行,赋值给单元格                    for (int row = 0;row < myTable.Rows.Count;row++)
                        {
                            rowIndex = rowIndex + 1;
                            colIndex = 0;
                            for (int col=0;col<myTable.Columns.Count;col++)
                            {
                                colIndex = colIndex + 1;
                                xlApp.Cells[rowIndex, colIndex] = grid[row,col].ToString();
                            }                    
                        }
                    }                            
                    xlApp.get_Range(xlApp.Cells[2, 1], xlApp.Cells[2, colIndex]).Font.Bold = true;
                    xlApp.get_Range(xlApp.Cells[2, 1], xlApp.Cells[rowIndex, colIndex]).Borders.LineStyle = 1;                          xlApp.Cells.EntireColumn.AutoFit();
                    xlApp.Cells.VerticalAlignment = Excel.Constants.xlCenter ;
                    xlApp.Cells.HorizontalAlignment = Excel.Constants.xlCenter ;
                            xlApp.Visible = true;            
                }
                catch(Exception e)
                {
                    throw e;
                }
                
            }
      

  2.   

    在2005中运行要做些小修改,毕竟DATAGRID跟DATAGRIDVIEW的一些操作不同,大体差不多