#region  将DataGridView中的数据导入Excel中,并显示Excel
        //// <summary>
        /// 将DataGridView中的数据导入Excel中,并显示Excel中
        /// DataGridView中绑定的是一个DataTable
        /// </summary>
        /// <param name="grid">DataGridView</param>
        /// <param name="ExcelTitle">Excel标题</param>

        public static void ExportDataGridTableToExcel(DataGridView grid, string ExcelTitle)
        {
            System.Data.DataTable myTable = (System.Data.DataTable)grid.DataSource;

            try
            {
                Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.ApplicationClass();

                int rowIndex;
                int colIndex;

                rowIndex = 2;
                colIndex = 0;

                Microsoft.Office.Interop.Excel.Workbook xlBook = xlApp.Workbooks.Add(true);

                if (grid.Rows.Count > 0)
                {
                    Microsoft.Office.Interop.Excel.Range range = xlApp.get_Range(xlApp.Cells[1, 1], xlApp.Cells[1, grid.Columns.Count]);
                    range.MergeCells = true;
                    xlApp.ActiveCell.FormulaR1C1 = ExcelTitle;
                    xlApp.ActiveCell.Font.Size = 18;
                    xlApp.ActiveCell.Font.Bold = true;

                    foreach (DataGridViewColumn colu in grid.Columns)
                    {
                        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.Columns.Count; col++)
                        {
                            colIndex = colIndex + 1;
                            if (grid.Columns[col].CellType.Name == "DataGridViewComboBoxCell")
                            {
                                xlApp.Cells[rowIndex, colIndex] = grid.Rows[row].Cells[col].FormattedValue;
                                // grid.Rows[row].Cells[0]
                            }
                            else
                            {
                                xlApp.Cells[rowIndex, colIndex] = grid.Rows[row].Cells[col].Value;
                            }
                        }
                    }
                }
                else
                {
                    Microsoft.Office.Interop.Excel.Range range = xlApp.get_Range(xlApp.Cells[1, 1], xlApp.Cells[1, myTable.Columns.Count]);
                    range.MergeCells = true;
                    xlApp.ActiveCell.FormulaR1C1 = ExcelTitle;
                    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.Rows[row].Cells[col].Value;
                        }
                    }
                }
                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 = Microsoft.Office.Interop.Excel.Constants.xlCenter;
                xlApp.Cells.HorizontalAlignment = Microsoft.Office.Interop.Excel.Constants.xlCenter;
                xlApp.Visible = true;
            }
            catch (Exception e)
            {
                throw e;
            }

        }

     
    
        //// <summary>
        /// 将DataGridView中的数据导入Excel中,并显示Excel中
        /// DataGridView中绑定的是一个DataView
        /// </summary>
        /// <param name="grid">DataGridView</param>
        /// <param name="ExcelTitle">Excel标题</param>

        public static void ExportDataGridViewToExcel(DataGridView grid, string ExcelTitle)
        {
            System.Data.DataView myView = (System.Data.DataView)grid.DataSource;

            try
            {
                Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.ApplicationClass();

                int rowIndex;
                int colIndex;

                rowIndex = 2;
                colIndex = 0;

                Microsoft.Office.Interop.Excel.Workbook xlBook = xlApp.Workbooks.Add(true);

                if (grid.Rows.Count > 0)
                {
                    Microsoft.Office.Interop.Excel.Range range = xlApp.get_Range(xlApp.Cells[1, 1], xlApp.Cells[1, grid.Columns.Count]);
                    range.MergeCells = true;
                    xlApp.ActiveCell.FormulaR1C1 = ExcelTitle;
                    xlApp.ActiveCell.Font.Size = 18;
                    xlApp.ActiveCell.Font.Bold = true;

                    foreach (DataGridViewColumn colu in grid.Columns)
                    {
                        colIndex = colIndex + 1;
                        xlApp.Cells[2, colIndex] = colu.HeaderText;
                    }

                    //得到的表所有行,赋值给单元格

                    for (int row = 0; row < myView.Table.Rows.Count; row++)
                    {
                        rowIndex = rowIndex + 1;
                        colIndex = 0;
                        for (int col = 0; col < grid.Columns.Count; col++)
                        {
                            colIndex = colIndex + 1;
                            if (grid.Columns[col].CellType.Name == "DataGridViewComboBoxCell")
                            {
                                xlApp.Cells[rowIndex, colIndex] = grid.Rows[row].Cells[col].FormattedValue;
                               // grid.Rows[row].Cells[0]
                            }
                            else
                            {
                                xlApp.Cells[rowIndex, colIndex] = grid.Rows[row].Cells[col].Value;
                            }
                        }
                    }
                }
                else
                {
                    Microsoft.Office.Interop.Excel.Range range = xlApp.get_Range(xlApp.Cells[1, 1], xlApp.Cells[1, myView.Table.Columns.Count]);
                    range.MergeCells = true;
                    xlApp.ActiveCell.FormulaR1C1 = ExcelTitle;
                    xlApp.ActiveCell.Font.Size = 18;
                    xlApp.ActiveCell.Font.Bold = true;

                    //将表中的栏位名称填到Excel的第一行

                    foreach (DataColumn Col in myView.Table.Columns)
                    {
                        colIndex = colIndex + 1;
                        xlApp.Cells[2, colIndex] = Col.ColumnName;
                    }

                    //得到的表所有行,赋值给单元格

                    for (int row = 0; row < myView.Table.Rows.Count; row++)
                    {
                        rowIndex = rowIndex + 1;
                        colIndex = 0;
                        for (int col = 0; col < myView.Table.Columns.Count; col++)
                        {
                            colIndex = colIndex + 1;
                            xlApp.Cells[rowIndex, colIndex] = grid.Rows[row].Cells[col].Value;
                        }
                    }
                }
                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 = Microsoft.Office.Interop.Excel.Constants.xlCenter;
                xlApp.Cells.HorizontalAlignment = Microsoft.Office.Interop.Excel.Constants.xlCenter;
                xlApp.Visible = true;
            }
            catch (Exception e)
            {
                throw e;
            }

        }

        #endregion

posted on 2008-08-23 13:35  Yang-S  阅读(2152)  评论(0)    收藏  举报