欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

(gridcontrol等)通用导出excel

程序员文章站 2022-06-08 17:41:22
...
  1. (gridcontrol等)通用导出excel
    关于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, 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(panels));
    //}
    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;
}

转载于