DevExpress WinForm通用控件导出Excel方法(支持多个控件分工作薄导出)

本文介绍了如何优化DevExpressWinform中的控件导出Excel功能,解决原有问题如图片导出、多表头导出等,并扩展支持多个控件分工作簿导出及自定义工作簿名称。提供了详细的代码示例和下载链接。
摘要由CSDN通过智能技术生成

前面我写了DevExpress通用导出excel方法,DevExpress Winform 所有可打印控件(gridcontrol等)通用导出excel的方法

(关于DevExpress Winform 的所有可打印控件的导出excel 的通用方法,并且解决DevExpress控件自带的方法存在的缺陷问题
1、解决GridControl自带方法不能导出图片;
2、GridControl 的BandGridView 多表头无法导出等问题;
3、解决PivotGridControl导出时候自动分组的问题;
4、支持多个控件一同导出同一个excel ;
5、支持不同控件显示在不同的工作薄内;)

这次扩展一下,之前是多个控件一同显示在一个工作薄,现在增加一个多个控件分开导到不同工作薄。之前有用到我那个方法的,可以改成这个方法。代码示例导出的工作薄名称是固定的sheet1,sheet2...,如有需要自定义自己想要的名字可以咨询我,当然少不了咨询费,非诚勿扰!谁再盗用我的代码未经我同意随意传播,还厚颜无耻说是自己原创的,菊花不保!

demo的源代码可以参考一下我 资源:

http://download.csdn.net/detail/u012097590/9688753

调用代码如下:

    using System;
    using System.Windows.Forms;
     
     
    namespace DevPrintableExport
    {
        public class ExportHelper
        {
            /// <summary>
            /// DevExpress控件通用导出Excel,支持多个控件同时导出在同一个Sheet表或者分不同工作薄
            /// eg:ExportToXlsx("test",true,"控件",gridControl1,gridControl2);
            /// 将gridControl1和gridControl2的数据一同导出到同一个文件不同的工作薄
            /// eg:ExportToXlsx("test",false,"",gridControl1,gridControl2);
            /// 将gridControl1和gridControl2的数据一同导出到同一个文件同一个的工作薄
            /// <param name="title">文件名</param>
            /// <param name="isPageForEachLink">多个打印控件是否分多个工作薄显示</param>
            /// <param name="sheetName">工作薄名称</param>
            /// <param name="printables">控件集 eg:GridControl,PivotGridControl,TreeList,ChartControl...</param>
            public static void ExportToExcel(string title, bool isPageForEachLink, string sheetName, params DevExpress.XtraPrinting.IPrintable[] printables)
            {
                SaveFileDialog saveFileDialog = new SaveFileDialog()
                {
                    FileName = title,
                    Title = "导出Excel",
                    Filter = "Excel文件(*.xlsx)|*.xlsx|Excel文件(*.xls)|*.xls"
                };
                DialogResult dialogResult = saveFileDialog.ShowDialog();
                if (dialogResult == DialogResult.Cancel)
                    return;
                string FileName = saveFileDialog.FileName;
                DevExpress.XtraPrintingLinks.CompositeLink link = new DevExpress.XtraPrintingLinks.CompositeLink(new DevExpress.XtraPrinting.PrintingSystem());
                foreach (var item in printables)
                {
                    var plink = new DevExpress.XtraPrinting.PrintableComponentLink() { Component = item };
                    link.Links.Add(plink);
                }
                if (isPageForEachLink)//15.1 的Xls不支持这个功能,15.2未知
                    link.CreatePageForEachLink();
                if (string.IsNullOrEmpty(sheetName)) sheetName = "Sheet";//默认工作薄名称
                try
                {
                    int count = 1;
                    //在重复名称后加(序号)
                    while (System.IO.File.Exists(FileName))
                    {
                        if (FileName.Contains(")."))
                        {
                            int start = FileName.LastIndexOf("(");
                            int end = FileName.LastIndexOf(").") - FileName.LastIndexOf("(") + 2;
                            FileName = FileName.Replace(FileName.Substring(start, end), string.Format("({0}).", count));
                        }
                        else
                        {
                            FileName = FileName.Replace(".", string.Format("({0}).", count));
                        }
                        count++;
                    }
                    if (FileName.LastIndexOf(".xlsx") >= FileName.Length - 5)
                    {
                        DevExpress.XtraPrinting.XlsxExportOptions options = new DevExpress.XtraPrinting.XlsxExportOptions() { SheetName = sheetName };
                        if (isPageForEachLink)
                            options.ExportMode = DevExpress.XtraPrinting.XlsxExportMode.SingleFilePageByPage;
                        link.ExportToXlsx(FileName, options);
                    }
                    else
                    {
                        DevExpress.XtraPrinting.XlsExportOptions options = new DevExpress.XtraPrinting.XlsExportOptions() { SheetName = sheetName };
                        if (isPageForEachLink) //15.Xls没有这个属性,15.2未知
                            options.ExportMode = DevExpress.XtraPrinting.XlsExportMode.SingleFilePageByPage;
                        link.ExportToXls(FileName, options);
                    }
                    if (DevExpress.XtraEditors.XtraMessageBox.Show("保存成功,是否打开文件?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Information) == DialogResult.Yes)
                        System.Diagnostics.Process.Start(FileName);//打开指定路径下的文件
                }
                catch (Exception ex)
                {
                    DevExpress.XtraEditors.XtraMessageBox.Show(ex.Message);
                }
            }
     
        }
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值