zoukankan      html  css  js  c++  java
  • (gridcontrol等)通用导出excel z

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

    调用该方法真正做到控件的所见所得的导出功能。

    /// <summary>
            /// DevExpress通用导出Excel,支持多个控件同时导出在同一个Sheet表
            /// eg:ExportToXlsx("",gridControl1,gridControl2);
            /// 将gridControl1和gridControl2的数据一同导出到同一张工作表
            /// </summary>
            /// <param name="title">文件名</param>
            /// <param name="panels">控件集</param>
            public void ExportToExcel(string title, params IPrintable[] panels)
            {
                SaveFileDialog saveFileDialog = new SaveFileDialog();
                saveFileDialog.FileName = title;
                saveFileDialog.Title = "导出Excel";
                saveFileDialog.Filter = "Excel文件(*.xlsx)|*.xlsx|Excel文件(*.xls)|*.xls";
                DialogResult dialogResult = saveFileDialog.ShowDialog();
                if (dialogResult == DialogResult.Cancel)
                    return;
                string FileName = saveFileDialog.FileName;
                PrintingSystem ps = new PrintingSystem();
                CompositeLink link = new CompositeLink(ps);
                ps.Links.Add(link);
                foreach (IPrintable panel in panels)
                {
                    link.Links.Add(CreatePrintableLink(panel));
                }
                link.Landscape = true;//横向           
                //判断是否有标题,有则设置         
                //link.CreateDocument(); //建立文档
                try
                {
                    int count = 1;
                    //在重复名称后加(序号)
                    while (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)
                    {
                        XlsxExportOptions options = new XlsxExportOptions();
                        link.ExportToXlsx(FileName, options);
                    }
                    else
                    {
                        XlsExportOptions options = new XlsExportOptions();
                        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);
                }
            }
            /// <summary>
            /// 创建打印Componet
            /// </summary>
            /// <param name="printable"></param>
            /// <returns></returns>
            PrintableComponentLink CreatePrintableLink(IPrintable printable)
            {
                ChartControl chart = printable as ChartControl;
                if (chart != null)
                    chart.OptionsPrint.SizeMode = DevExpress.XtraCharts.Printing.PrintSizeMode.Stretch;
                PrintableComponentLink printableLink = new PrintableComponentLink() { Component = printable };
                return printableLink;
            }
    
  • 相关阅读:
    人生是马拉松,胜者不一定是跑得最快的
    二.JSP开发过程中遇到的问题及解决
    一.JSP开发的工具下载与环境搭建
    将文件隐藏到图片中的方法与一键合成工具
    VC6兼容性及打开文件崩溃问题解决
    windows10UWP开发真机调试时遇到DEP6100和DEP6200解决办法
    Vs2015 win10虚拟机启动问题:无法设置UDP端口 解决方法 合集(转载)
    10个维修中最常见的蓝屏代码,值得收藏!
    [idea]添加jar包的方法
    [idea]创建一个控制台程序
  • 原文地址:https://www.cnblogs.com/zeroone/p/5954442.html
Copyright © 2011-2022 走看看