DataGridView 导出数据

虽说网上有很多 导出数据的方法,但大多只是表面上导出所有数据,并没有考虑到一些细节问题,

例如:隐藏列不该导出,复选框列不该导出。。。。。

在浏览他人写的方法后,结合自己的思想,总结出了如下方法

        #region 将 Datagridview 中的数据导出 

        /// <summary>
        /// 将 Datagridview 中的数据导出 通用
        /// </summary>
        /// <param name="dgv">DataGridView</param>
        /// <param name="tittle">要导出的文件标题</param>
        public void Export_DGV(DataGridView dgv,string tittle)
        {  
           
            if (dgv == null || dgv.Rows.Count < 1 || dgv.Columns.Count < 1)
            {
                MessageBox.Show("没有任何有效数据!");
                return;
            }

            int colscount = dgv.Columns.Count;

            string saveFileName = "";
            SaveFileDialog saveDialog = new SaveFileDialog(); //新建保存对话框
            saveDialog.DefaultExt = "xls";
            saveDialog.Filter = "Excel文件|*.xls";
            saveDialog.FileName = "Sheet1";
            saveDialog.ShowDialog();
            saveFileName = saveDialog.FileName;
            if (saveFileName.IndexOf(":") < 0)
            {
                return; //被点了取消
            }

            //验证以fileNameString命名的文件是否存在,如果存在删除它  
            FileInfo file = new FileInfo(saveFileName);
            if (file.Exists)
            {
                try
                {
                    file.Delete();
                }
                catch (Exception error)
                {
                    MessageBox.Show(error.Message, "删除失败 ", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    return;
                }
            }
          

            Microsoft.Office.Interop.Excel.Application objExcel = null;
            Workbook objWorkbook = null;
            Microsoft.Office.Interop.Excel.Worksheet objsheet = null;
            try
            {
                //申明对象  
                objExcel = new Microsoft.Office.Interop.Excel.Application();

                if (objExcel == null)
                {
                    MessageBox.Show("无法创建Excel对象,可能您的机子未安装Excel");
                    return;
                }

                objWorkbook = objExcel.Workbooks.Add(Missing.Value);
                objsheet = (Microsoft.Office.Interop.Excel.Worksheet)objWorkbook.ActiveSheet;
                //设置EXCEL不可见  
                objExcel.Visible = false;

                //判断哪些列是不用显示的
                List<int> colArry = new List<int>();
                for (int i = 0; i < colscount; i++)
                {
                    if (dgv.Rows[0].Cells[i] is DataGridViewCheckBoxCell || (dgv.Columns[i].Visible == false)) //判断是否是复选框或者是隐藏的列
                    {
                        colArry.Add(i);
                    }
                }

                //向Excel中写入表格的表头  
                int displayColumnsCount = 1;
                for (int i = 0; i <= dgv.ColumnCount - 1; i++)
                {
                    if (!colArry.Contains(i))
                    {
                        objExcel.Cells[1, displayColumnsCount] = dgv.Columns[i].HeaderText.Trim();
                        displayColumnsCount++;
                    }
                }
               
                //向Excel中逐行逐列写入表格中的数据  
                for (int row = 0; row <= dgv.RowCount - 1; row++)
                {
                    displayColumnsCount = 1;
                    for (int col = 0; col < colscount; col++)
                    {
                        if (!colArry.Contains(col))
                        {
                            try
                            {
                                objExcel.Cells[row + 2, displayColumnsCount] = dgv.Rows[row].Cells[col].Value.ToString().Trim();
                                displayColumnsCount++;
                            }
                            catch (Exception)
                            {

                            }

                        }
                    }
                }
  
                //保存文件  
                objWorkbook.SaveAs(saveFileName, Missing.Value, Missing.Value, Missing.Value, Missing.Value,
                      Missing.Value, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlShared, Missing.Value, Missing.Value, Missing.Value,
                        Missing.Value, Missing.Value);
            }
            catch (Exception ex)
            {
                MessageBox.Show("导出文件时出错,文件可能正被打开!\n" + ex.Message);
                return;
            }
            finally
            {

                objExcel.Quit();
                GC.Collect();//强行销毁


           }
            MessageBox.Show(saveFileName + "\n\n导出完毕! ", "提示 ", MessageBoxButtons.OK, MessageBoxIcon.Information);

        }

        #endregion

 

在这里直接调用此方法就行,就可以轻松将数据比较完美的导出了。。。

posted @ 2012-01-05 13:12  奔跑Yes  阅读(728)  评论(1编辑  收藏  举报