C#将DataGridView中的数据保存为EXCEL的方法

/// <summary>
                ///方法,导出DataGridView中的数据到Excel文件
                /// </summary>
                /// <param   name= "dgv "> DataGridView </param>
                public   static   void   DataGridViewToExcel(DataGridView   dgv)
                {


                        #region   验证可操作性

                        //申明保存对话框
                        SaveFileDialog   dlg   =   new   SaveFileDialog();
                        //默然文件后缀
                        dlg.DefaultExt   =   "xls ";
                        //文件后缀列表
                        dlg.Filter   =   "EXCEL文件(*.XLS) ¦*.xls ";
                        //默然路径是系统当前路径
                        dlg.InitialDirectory   =   Directory.GetCurrentDirectory();
                        //打开保存对话框
                        dlg.ShowDialog();
                        //返回文件路径
                        string   fileNameString   =   dlg.FileName;
                        //验证strFileName是否为空或值无效
                        if   (fileNameString.Trim()   ==   " ")
                        {   return;   }
                        //定义表格内数据的行数和列数
                        int   rowscount   =   dgv.Rows.Count;
                        int   colscount   =   dgv.Columns.Count;
                        //行数必须大于0
                        if   (rowscount   <=   0)
                        {
                                MessageBox.Show( "没有数据可供保存 ",   "提示 ",   MessageBoxButtons.OK,   MessageBoxIcon.Information);
                                return;
                        }

                        //列数必须大于0
                        if   (colscount   <=   0)
                        {
                                MessageBox.Show( "没有数据可供保存 ",   "提示 ",   MessageBoxButtons.OK,   MessageBoxIcon.Information);
                                return;
                        }

                        //行数不可以大于65536
                        if   (rowscount   >   65536)
                        {
                                MessageBox.Show( "数据记录数太多(最多不能超过65536条),不能保存 ",   "提示 ",   MessageBoxButtons.OK,   MessageBoxIcon.Information);
                                return;
                        }

                        //列数不可以大于255
                        if   (colscount   >   255)
                        {
                                MessageBox.Show( "数据记录行数太多,不能保存 ",   "提示 ",   MessageBoxButtons.OK,   MessageBoxIcon.Information);
                                return;
                        }

                        //验证以fileNameString命名的文件是否存在,如果存在删除它
                        FileInfo   file   =   new   FileInfo(fileNameString);
                        if   (file.Exists)
                        {
                                try
                                {
                                        file.Delete();
                                }
                                catch   (Exception   error)
                                {
                                        MessageBox.Show(error.Message,   "删除失败 ",   MessageBoxButtons.OK,   MessageBoxIcon.Warning);
                                        return;
                                }
                        }
                        #endregion
                        Excel.Application   objExcel=null;
                        Excel.Workbook   objWorkbook=null;
                        Excel.Worksheet   objsheet=null;
                        try
                        {
                                //申明对象
                                objExcel   =   new   Microsoft.Office.Interop.Excel.Application();
                                objWorkbook   =   objExcel.Workbooks.Add(Missing.Value);
                                objsheet   =   (Excel.Worksheet)objWorkbook.ActiveSheet;
                                //设置EXCEL不可见
                                objExcel.Visible   =   false;

                                //向Excel中写入表格的表头
                                int   displayColumnsCount   =   1;
                                for   (int   i   =   0;   i   <=   dgv.ColumnCount-1;   i++)
                                {
                                        if   (dgv.Columns[i].Visible==true)
                                        {
                                                objExcel.Cells[1,   displayColumnsCount]   =   dgv.Columns[i].HeaderText.Trim();
                                                displayColumnsCount++;
                                        }
                                }
                                //设置进度条
                                //tempProgressBar.Refresh();
                                //tempProgressBar.Visible   =   true;
                                //tempProgressBar.Minimum=1;
                                //tempProgressBar.Maximum=dgv.RowCount;
                                //tempProgressBar.Step=1;
                                //向Excel中逐行逐列写入表格中的数据
                                for   (int   row   =   0;   row   <=   dgv.RowCount   -   1;   row++)
                                {
                                        //tempProgressBar.PerformStep();

                                        displayColumnsCount   =   1;
                                        for   (int   col   =   0;   col   <   colscount;   col++)
                                        {
                                                if   (dgv.Columns[col].Visible   ==   true)
                                                {
                                                        objExcel.Cells[row   +   2,   displayColumnsCount]   =   dgv.Rows[row].Cells[col].Value.ToString().Trim();
                                                        displayColumnsCount++;
                                                }
                                        }
                                }
                                //隐藏进度条
                                //tempProgressBar.Visible   =   false;
                                //保存文件
                                objWorkbook.SaveAs(fileNameString,   Missing.Value,   Missing.Value,   Missing.Value,   Missing.Value,
                                        Missing.Value,   Excel.XlSaveAsAccessMode.xlShared,   Missing.Value,   Missing.Value,   Missing.Value,
                                        Missing.Value,   Missing.Value);
                        }
                        catch(Exception   error)
                        {
                                MessageBox.Show(error.Message,   "警告 ",   MessageBoxButtons.OK,   MessageBoxIcon.Warning);
                                return;
                        }
                        finally
                        {
                                //关闭Excel应用
                                if   (objWorkbook   !=   null)   objWorkbook.Close(Missing.Value,   Missing.Value,   Missing.Value);
                                if   (objExcel.Workbooks   !=   null)   objExcel.Workbooks.Close();
                                if   (objExcel   !=   null)   objExcel.Quit();
                               
                                objsheet   =   null;
                                objWorkbook   =   null;
                                objExcel   =   null;
                        }
                        MessageBox.Show(fileNameString   +   ""n"n导出完毕! ",   "提示 ",   MessageBoxButtons.OK,   MessageBoxIcon.Information);

                }

 

 

 

 

#region   验证可操作性
            ////申明保存对话框
            //SaveFileDialog   dlg   =   new   SaveFileDialog();
            ////默然文件后缀
            //dlg.DefaultExt   =   "xls ";
            ////文件后缀列表
            //dlg.Filter   =   "EXCEL文件(*.XLS)|*.xls ";
            ////默然路径是系统当前路径
            //dlg.InitialDirectory   =   Directory.GetCurrentDirectory();
            ////打开保存对话框
            //dlg.ShowDialog();
            ////返回文件路径
            //string   fileNameString   =   dlg.FileName;
            ////验证strFileName是否为空或值无效
            //if   (fileNameString.Trim()   ==   " ")
            //{   return;   }
            //定义表格内数据的行数和列数
            int   rowscount   =   this.dataGridView2.Rows.Count;
            int colscount = this.dataGridView2.Columns.Count;
            //行数必须大于0
            if   (rowscount   <=   0)
            {
                    MessageBox.Show( "没有数据可供保存 ",   "提示 ",   MessageBoxButtons.OK,   MessageBoxIcon.Information);
                    return;
            }

            //列数必须大于0
            if   (colscount   <=   0)
            {
                    MessageBox.Show( "没有数据可供保存 ",   "提示 ",   MessageBoxButtons.OK,   MessageBoxIcon.Information);
                    return;
            }

            //行数不可以大于65536
            if   (rowscount   >   65536)
            {
                    MessageBox.Show( "数据记录数太多(最多不能超过65536条),不能保存 ",   "提示 ",   MessageBoxButtons.OK,   MessageBoxIcon.Information);
                    return;
            }

            //列数不可以大于255
            if   (colscount   >   255)
            {
                    MessageBox.Show( "数据记录行数太多,不能保存 ",   "提示 ",   MessageBoxButtons.OK,   MessageBoxIcon.Information);
                    return;
            }

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

            //导出到execl   
            try
            {
                //没有数据的话就不往下执行   
                if (dataGridView2.Rows.Count == 0)
                    return;
                //实例化一个Excel.Application对象   
                Excel.Application excel = new Excel.Application();

                //让后台执行设置为不可见,为true的话会看到打开一个Excel,然后数据在往里写   
                excel.Visible = false;

                //新增加一个工作簿,Workbook是直接保存,不会弹出保存对话框,加上Application会弹出保存对话框,值为false会报错   
                excel.Application.Workbooks.Add(true);
                //生成Excel中列头名称   
                for (int i = 0; i < dataGridView2.Columns.Count; i++)
                {
                    excel.Cells[1, i + 1] = dataGridView2.Columns[i].HeaderText;
                }
                //把DataGridView当前页的数据保存在Excel中   
                for (int i = 0; i < dataGridView2.Rows.Count - 1; i++)
                {
                    for (int j = 0; j < dataGridView2.Columns.Count; j++)
                    {
                        if (dataGridView2[j, i].ValueType == typeof(string))
                        {
                            excel.Cells[i + 2, j + 1] = "'" + dataGridView2[j, i].Value.ToString();
                        }
                        else
                        {
                            excel.Cells[i + 2, j + 1] = dataGridView2[j, i].Value.ToString();
                        }
                    }
                }

                //设置禁止弹出保存和覆盖的询问提示框   
                excel.DisplayAlerts = false;
                excel.AlertBeforeOverwriting = false;

                //保存工作簿   
                //excel.Application.Workbooks.Add(true).Save();
                //保存excel文件   
                excel.Save("D:" + """KKHMD.xls");

                //确保Excel进程关闭   
                excel.Quit();
                excel = null;

            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "错误提示");
            }  

 

 

 

 

 

/// <summary>
                ///方法,导出DataGridView中的数据到Excel文件
                /// </summary>
                /// <param   name= "dgv "> DataGridView </param>
                public   static   void   DataGridViewToExcel(DataGridView   dgv)
                {


                        #region   验证可操作性

                        //申明保存对话框
                        SaveFileDialog   dlg   =   new   SaveFileDialog();
                        //默然文件后缀
                        dlg.DefaultExt   =   "xls ";
                        //文件后缀列表
                        dlg.Filter   =   "EXCEL文件(*.XLS)|*.xls ";
                        //默然路径是系统当前路径
                        dlg.InitialDirectory   =   Directory.GetCurrentDirectory();
                        //打开保存对话框
                        dlg.ShowDialog();
                        //返回文件路径
                        string   fileNameString   =   dlg.FileName;
                        //验证strFileName是否为空或值无效
                        if   (fileNameString.Trim()   ==   " ")
                        {   return;   }
                        //定义表格内数据的行数和列数
                        int   rowscount   =   dgv.Rows.Count;
                        int   colscount   =   dgv.Columns.Count;
                        //行数必须大于0
                        if   (rowscount   <=   0)
                        {
                                MessageBox.Show( "没有数据可供保存 ",   "提示 ",   MessageBoxButtons.OK,   MessageBoxIcon.Information);
                                return;
                        }

                        //列数必须大于0
                        if   (colscount   <=   0)
                        {
                                MessageBox.Show( "没有数据可供保存 ",   "提示 ",   MessageBoxButtons.OK,   MessageBoxIcon.Information);
                                return;
                        }

                        //行数不可以大于65536
                        if   (rowscount   >   65536)
                        {
                                MessageBox.Show( "数据记录数太多(最多不能超过65536条),不能保存 ",   "提示 ",   MessageBoxButtons.OK,   MessageBoxIcon.Information);
                                return;
                        }

                        //列数不可以大于255
                        if   (colscount   >   255)
                        {
                                MessageBox.Show( "数据记录行数太多,不能保存 ",   "提示 ",   MessageBoxButtons.OK,   MessageBoxIcon.Information);
                                return;
                        }

                        //验证以fileNameString命名的文件是否存在,如果存在删除它
                        FileInfo   file   =   new   FileInfo(fileNameString);
                        if   (file.Exists)
                        {
                                try
                                {
                                        file.Delete();
                                }
                                catch   (Exception   error)
                                {
                                        MessageBox.Show(error.Message,   "删除失败 ",   MessageBoxButtons.OK,   MessageBoxIcon.Warning);
                                        return;
                                }
                        }
                        #endregion
                        Excel.Application   objExcel=null;
                        Excel.Workbook   objWorkbook=null;
                        Excel.Worksheet   objsheet=null;
                        try
                        {
                                //申明对象
                                objExcel   =   new   Microsoft.Office.Interop.Excel.Application();
                                objWorkbook   =   objExcel.Workbooks.Add(Missing.Value);
                                objsheet   =   (Excel.Worksheet)objWorkbook.ActiveSheet;
                                //设置EXCEL不可见
                                objExcel.Visible   =   false;

                                //向Excel中写入表格的表头
                                int   displayColumnsCount   =   1;
                                for   (int   i   =   0;   i   <=   dgv.ColumnCount-1;   i++)
                                {
                                        if   (dgv.Columns[i].Visible==true)
                                        {
                                                objExcel.Cells[1,   displayColumnsCount]   =   dgv.Columns[i].HeaderText.Trim();
                                                displayColumnsCount++;
                                        }
                                }
                                //设置进度条
                                //tempProgressBar.Refresh();
                                //tempProgressBar.Visible   =   true;
                                //tempProgressBar.Minimum=1;
                                //tempProgressBar.Maximum=dgv.RowCount;
                                //tempProgressBar.Step=1;
                                //向Excel中逐行逐列写入表格中的数据
                                for   (int   row   =   0;   row   <=   dgv.RowCount   -   1;   row++)
                                {
                                        //tempProgressBar.PerformStep();

                                        displayColumnsCount   =   1;
                                        for   (int   col   =   0;   col   <   colscount;   col++)
                                        {
                                                if   (dgv.Columns[col].Visible   ==   true)
                                                {
                                                        objExcel.Cells[row   +   2,   displayColumnsCount]   =   dgv.Rows[row].Cells[col].Value.ToString().Trim();
                                                        displayColumnsCount++;
                                                }
                                        }
                                }
                                //隐藏进度条
                                //tempProgressBar.Visible   =   false;
                                //保存文件
                                objWorkbook.SaveAs(fileNameString,   Missing.Value,   Missing.Value,   Missing.Value,   Missing.Value,
                                        Missing.Value,   Excel.XlSaveAsAccessMode.xlShared,   Missing.Value,   Missing.Value,   Missing.Value,
                                        Missing.Value,   Missing.Value);
                        }
                        catch(Exception   error)
                        {
                                MessageBox.Show(error.Message,   "警告 ",   MessageBoxButtons.OK,   MessageBoxIcon.Warning);
                                return;
                        }
                        finally
                        {
                                //关闭Excel应用
                                if   (objWorkbook   !=   null)   objWorkbook.Close(Missing.Value,   Missing.Value,   Missing.Value);
                                if   (objExcel.Workbooks   !=   null)   objExcel.Workbooks.Close();
                                if   (objExcel   !=   null)   objExcel.Quit();
                               
                                objsheet   =   null;
                                objWorkbook   =   null;
                                objExcel   =   null;
                        }
                        MessageBox.Show(fileNameString   +   ""n"n导出完毕! ",   "提示 ",   MessageBoxButtons.OK,   MessageBoxIcon.Information);

                }

你可能感兴趣的:(datagridview)