使用DevExpress导出GridControl控件数据到excel文件

使用DevExpress可以实现将界面的GridControl的内容直接导出到excel文件,一般实现方法如下所示:

	public void export(GridControl gridControl1)
        {
            SaveFileDialog saveFileDialog1 = new SaveFileDialog();
            saveFileDialog1.FileName = "";
            saveFileDialog1.Filter = "Excel文件(.xls)|*.xls";
            string strtype = "Excel文件名";
            
            saveFileDialog1.FileName = strtype + DateTime.Now.ToString("yyyyMMddhhmmss");
            saveFileDialog1.OverwritePrompt = false; //已存在文件是否覆盖提示
            if (saveFileDialog1.ShowDialog() != DialogResult.OK)
                return;
            //已存在文件是否覆盖提示
            while (System.IO.File.Exists(saveFileDialog1.FileName) &&
                DevExpress.XtraEditors.XtraMessageBox.Show("该文件名已存在,是否覆盖?",
               "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question) != DialogResult.Yes)
            {
                if (saveFileDialog1.ShowDialog() != DialogResult.OK)
                    return;
            }
            if (saveFileDialog1.FileName != "")
            {
                try
                {
                    System.IO.FileStream fs =(System.IO.FileStream)saveFileDialog1.OpenFile();
                    gridControl1.ExportToXls(fs);//将GridControl的内容导出到指定的文件路径
                    fs.Close();
                    DevExpress.XtraEditors.XtraMessageBox.Show("数据导出成功!", "提示");
                }
                catch (Exception ex)
                {
                    if (ex.Message.Contains("正由另一进程使用"))
                    {
                        DevExpress.XtraEditors.XtraMessageBox.Show("数据导出失败!文件正由另一个程序占用!", "提示");
                    }
                    else
                        DevExpress.XtraEditors.XtraMessageBox.Show("数据导出失败!数据量过大,请分别统计再导出!", "提示");
                }
            }

        }
不过以上代码会出现一定的bug,比如说如果GridControl的数据是取自于数据库,之后使用CustomColumnDisplayText事件的触发函数修改其中一两个字段的值后展示到界面,而使用以上的方法则导出的结果还为取自数据库的原始值,并非处理后的值。那么应当为ExportToXls函数设置导出选项。

将如下代码:

gridControl1.ExportToXls(fs);//将GridControl的内容导出到指定的文件路径
替换为:

DevExpress.XtraPrinting.XlsExportOptions options = new DevExpress.XtraPrinting.XlsExportOptions(DevExpress.XtraPrinting.TextExportMode.Value);
options.TextExportMode = TextExportMode.Text;//设置导出模式为文本
gridControl1.ExportToXls(fs,options);

而导出的excel文档的格式不太美观,列的宽度过短,因为这种方法是直接导出界面显示的GridControl效果,默认为表格列宽度最小值,应当对GridControl的属性进行设置:设置GridControl的OptionPrint下的AutoWidth的值为false。以上设置即可使导出的excel文件列宽自动调整,并且可以根据需要调整GridControl控件具体列在界面展示宽度即可。

你可能感兴趣的:(C#DevExpress)