DevExpress GridControl GridView 导出到 Excel 类

说明:

1>GridView 导出到 Excel (如果分页,只导出当前页数据)

2>GridView 导出到 Excel

3>方法2可以参考DataTable 导出到 Excel

自定义类如下:

 #region GridView 导出到 Excel   Method First
        /// <summary>
        ///  GridView 导出到 Excel   (如果分页,只导出当前页数据)
        /// </summary>
        /// <param name="gv">GridView</param>
        /// <param name="sheetName">工作表名称</param>
        /// <param name="isOpen">导出完成后是否打开Excel   如果不打开会自动杀死当前Excel进程</param>
        /// <returns>错误信息,如果为空,说明用户取消导入</returns>
        public static string GvToExcel(DevExpress.XtraGrid.Views.Grid.GridView gv, string sheetName, bool isOpen)
        {
            //返回值
            string str = "";
            string fileName = "";
            //保存对话框,是否保存
            SaveFileDialog sfd = new SaveFileDialog();
            sfd.Filter = "(*.xls,*.xlsx)|*.xls;*.xlsx";
            if (sfd.ShowDialog() != DialogResult.OK)
            {
                str = "";
                return str;
            }
            fileName = sfd.FileName;

            if (gv == null)
            {
                str = "GridView 不能为空!";
                return str;
            }
            if (gv.RowCount < 1)
            {
                str = "没有记录可以导出";
                return str;
            }

            //获取列名、列标题  放到List集合中
            System.Collections.ArrayList listCaption = new System.Collections.ArrayList();
            System.Collections.ArrayList listFieldName = new System.Collections.ArrayList();
            for (int i = 0; i < gv.Columns.Count; i++)
            {
                if (gv.Columns[i].Visible)
                {
                    listCaption.Add(gv.Columns[i].Caption);
                    listFieldName.Add(gv.Columns[i].FieldName);
                }
            }

            Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application();
            excel.Workbooks.Add(true);
            Microsoft.Office.Interop.Excel.Worksheet wSheet = (Microsoft.Office.Interop.Excel.Worksheet)excel.ActiveSheet;
            Microsoft.Office.Interop.Excel.Range range;
            if (sheetName != null && sheetName.Length > 0)
            {
                wSheet.Name = sheetName;
            }
            else
            {
                wSheet.Name = gv.Name;
            }

            try
            {
                //写标题
                for (int j = 0; j < listCaption.Count; j++)
                {
                    excel.Cells[1, j + 1] = listCaption[j];
                    range = (Microsoft.Office.Interop.Excel.Range)wSheet.Cells[1, j + 1];
                    range.HorizontalAlignment = Microsoft.Office.Interop.Excel.XlHAlign.xlHAlignCenter;
                }
                //写内容
                for (int m = 0; m < gv.RowCount; m++)
                {
                    for (int n = 0; n < listCaption.Count; n++)
                    {
                        excel.Cells[m + 2, n + 1] = gv.GetRowCellValue(m, listFieldName[n].ToString()) is DBNull ? "" : gv.GetRowCellValue(m, listFieldName[n].ToString()).ToString();
                    }
                }

                wSheet.SaveAs(fileName,
                    Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);

                str = "导出成功!共导出 " + gv.RowCount + " 条数据";
                return str;
            }
            catch
            {
                str = "导出异常,请重试";
                return str;
            }
            finally
            {
                if (isOpen)
                {
                    //前台显示给用户
                    excel.Visible = true;
                    wSheet = null;
                    excel = null;
                }
                else
                {
                    excel.Visible = false;
                    excel.Quit();
                    // excel = null;
                    //杀死Excel 进程
                    KillProcess(excel);
                }
                GC.Collect();
            }
        }
        #endregion

        #region GridView 导出到 Excel   Method Second
        /// <summary>
        /// GridView 导出到 Excel
        /// </summary>
        /// <param name="dt">GridControl.DataSource ==dt</param>
        /// <param name="gv">GridView 名称</param>
        /// <param name="sheetName">工作表名称</param>
        /// <param name="isOpen">导出完成后是否打开Excel   如果不打开会自动杀死当前Excel进程</param>
        /// <returns>错误信息,如果为空,说明用户取消导入</returns>
        public static string GvToExcel(DataTable dt, DevExpress.XtraGrid.Views.Grid.GridView gv, string sheetName, bool isOpen) {
            //返回值
            string str = "";           

            //执行方法,如果datatable为空,导出当前页数据,否则,导出所有页数据
            if(dt==null){
                   str=GvToExcel(gv,sheetName,isOpen);
            }else{
                    if (gv == null)
                    {
                        str = "GridView 不能为空!";
                        return str;
                    }
                    if (gv.RowCount < 1)
                    {
                        str = "没有记录可以导出";
                        return str;
                    }

                    //获取列名、列标题  放到List集合中
                    System.Collections.ArrayList listCaption = new System.Collections.ArrayList();
                    System.Collections.ArrayList listFieldName = new System.Collections.ArrayList();
                    for (int i = 0; i < gv.Columns.Count; i++)
                    {
                        if (gv.Columns[i].Visible)
                        {
                            listCaption.Add(gv.Columns[i].Caption);
                            listFieldName.Add(gv.Columns[i].FieldName);
                        }
                    }
                    //将ArrayList 转换成 一维数组
                    string[] captions = (string[])listCaption.ToArray(typeof(string));
                    string[] fieldName =(string[]) listFieldName.ToArray(typeof(string));
                    //推荐使用List<>  因为ArrayList转换时会装、拆箱,影响效率
                    //List<string> list = new List<string>();
                    //list.Add("aa");
                    //string[] aaa =list.ToArray();

                    str=DtToExcel(dt,captions,fieldName,sheetName,isOpen);
            }
           return str;
        }
        #endregion

调用(举例):

 string str =Functionjsj.GvToExcel(gridView1, "学生信息", true);
            if (str.Length > 0) {
                MessageBox.Show(str, System.Windows.Forms.Application.ProductName);
                return;
            }
//说明  导出的表为 dt表中gridview1显示的列的集合
 string str = Functionjsj.GvToExcel(dt,gridView1, "学生信息", true);
            if (str.Length > 0)
            {
                MessageBox.Show(str, System.Windows.Forms.Application.ProductName);
                return;
            }
时间: 2024-10-29 03:57:23

DevExpress GridControl GridView 导出到 Excel 类的相关文章

GridView导出成Excel字符&quot;0&quot;丢失/数字丢失的处理方式 收藏

GridView导出成Excel字符"0"丢失/数字丢失的处理方式 收藏 GridView 导出成Excel文件,这个代码在网上比较多.但是发现存在一个问题,导出的数据中如果有"012457890"的内容,用Excel打开后就变成 了"12457890",少了前面的0;原因是Excel把它当作数字来格式化了,就把"0"给去掉了.   解决思路:在Excel中作一个包含有"012457890"的内容,设定单元

gridview导出到excel

public static void gvexcel(GridView grv, string strcells) { string style = @"<style> .text { mso-number-format:\@; } </script> ";//解决0缺失问题 StringBuilder sb = new StringBuilder(); StringWriter sw = new StringWriter(sb); HtmlTextWriter

DevExpress XtraGrid 数据导出导入Excel

// <summary> /// 导出按钮 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void FrmAppItem_F9ClickHandler(object sender, EventArgs e) { string strName = "";

DevExpress.GridControl.gridView的一些注意

1.DevExpress控件组中的GridControl控件不能使横向滚动条有效.现象:控件中的好多列都挤在一起,列宽都变的很小,根本无法正常浏览控件单元格中的内容. 解决: gridView1.OptionsView.ColumnAutoWidth属性是true,即各列的宽度自动调整,你把它设成false,就会出现了. 2.使单元格不可编辑. gridcontrol -->gridview -->OptionsBehavior -->Editable=false 3.没有下拉滚动条事件

DataTable 导出到 Excel 类

底层类: #region DataTable 导出到 Excel /// <summary> /// DataTable 导出到 Excel /// </summary> /// <param name="dt">数据表</param> /// <param name="captions">要导出的列标题</param> /// <param name="fieldNames&q

将Gridview导出到Excel

GridViewToExcel(EdceExcelGV, "application/ms-exce","xxxxxx表"); protected void GridViewToExcel(Control ctrl, string FileType, string FileName) { /*Response.Charset = "GB2312"; Response.ContentEncoding = Encoding.UTF8; HttpCont

Qt编写的项目作品18-数据导出到Excel及Pdf和打印数据

一.功能特点 原创导出数据机制,不依赖任何office组件或者操作系统等第三方库,尤其是支持嵌入式linux. 10万行数据9个字段只需要2秒钟完成. 只需要四个步骤即可开始急速导出大量数据到Excel. 同时提供直接写入数据接口和多线程写入数据接口,不卡主界面. 可设置标题.副标题.表名. 可设置字段名称.列宽度. 可设置是否启用校验过滤数据.校验的列.校验规则.校验值,符合规则的特殊颜色显示. 可设置随机背景颜色及需要随机背景色的列集合. 支持分组输出数据,比如按照设备分组输出数据,方便查看

022医疗项目-模块二:药品目录的导入导出-对XSSF导出excel类进行封装

资源全部来源于传智播客. 好的架构师写的程序,就算给刚入门的新手看,新手一看就知道怎么去用.所以我们要对XSSF导出excel类进行封装.这是架构师的工作,但我们也要知道. 我们写一个封装类: 这个类单独有自己的main函数. 我们进入main函数一步一步看: public static void main(String[] args) throws Exception { /** 导出文件存放物理路径 * @param fileWebPath * 导出文件web下载路径 * @param fi

扩展GridView导出Excel功能

using System;using System.Collections.Generic;using System.IO;using System.Linq;using System.Runtime.CompilerServices;using System.Text;using System.Web;using System.Web.Compilation;using System.Web.UI;using System.Web.UI.WebControls; namespace Web{