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

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

  1. /// <summary>
  2. /// DevExpress通用导出Excel,支持多个控件同时导出在同一个Sheet表
  3. /// eg:ExportToXlsx("",gridControl1,gridControl2);
  4. /// 将gridControl1和gridControl2的数据一同导出到同一张工作表
  5. /// </summary>
  6. /// <param name="title">文件名</param>
  7. /// <param name="panels">控件集</param>
  8. public void ExportToExcel(string title, params IPrintable[] panels)
  9. {
  10. SaveFileDialog saveFileDialog = new SaveFileDialog();
  11. saveFileDialog.FileName = title;
  12. saveFileDialog.Title = "导出Excel";
  13. saveFileDialog.Filter = "Excel文件(*.xlsx)|*.xlsx|Excel文件(*.xls)|*.xls";
  14. DialogResult dialogResult = saveFileDialog.ShowDialog();
  15. if (dialogResult == DialogResult.Cancel)
  16. return;
  17. string FileName = saveFileDialog.FileName;
  18. PrintingSystem ps = new PrintingSystem();
  19. CompositeLink link = new CompositeLink(ps);
  20. ps.Links.Add(link);
  21. foreach (IPrintable panel in panels)
  22. {
  23. link.Links.Add(CreatePrintableLink(panel));
  24. }
  25. link.Landscape = true;//横向
  26. //判断是否有标题,有则设置
  27. //link.CreateDocument(); //建立文档
  28. try
  29. {
  30. int count = 1;
  31. //在重复名称后加(序号)
  32. while (File.Exists(FileName))
  33. {
  34. if (FileName.Contains(")."))
  35. {
  36. int start = FileName.LastIndexOf("(");
  37. int end = FileName.LastIndexOf(").") - FileName.LastIndexOf("(") + 2;
  38. FileName = FileName.Replace(FileName.Substring(start, end), string.Format("({0}).", count));
  39. }
  40. else
  41. {
  42. FileName = FileName.Replace(".", string.Format("({0}).", count));
  43. }
  44. count++;
  45. }
  46. if (FileName.LastIndexOf(".xlsx") >= FileName.Length - 5)
  47. {
  48. XlsxExportOptions options = new XlsxExportOptions();
  49. link.ExportToXlsx(FileName, options);
  50. }
  51. else
  52. {
  53. XlsExportOptions options = new XlsExportOptions();
  54. link.ExportToXls(FileName, options);
  55. }
  56. if (DevExpress.XtraEditors.XtraMessageBox.Show("保存成功,是否打开文件?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Information) == DialogResult.Yes)
  57. System.Diagnostics.Process.Start(FileName);//打开指定路径下的文件
  58. }
  59. catch (Exception ex)
  60. {
  61. DevExpress.XtraEditors.XtraMessageBox.Show(ex.Message);
  62. }
  63. }
  64. /// <summary>
  65. /// 创建打印Componet
  66. /// </summary>
  67. /// <param name="printable"></param>
  68. /// <returns></returns>
  69. PrintableComponentLink CreatePrintableLink(IPrintable printable)
  70. {
  71. ChartControl chart = printable as ChartControl;
  72. if (chart != null)
  73. chart.OptionsPrint.SizeMode = DevExpress.XtraCharts.Printing.PrintSizeMode.Stretch;
  74. PrintableComponentLink printableLink = new PrintableComponentLink() { Component = printable };
  75. return printableLink;
  76. }

(gridcontrol等)通用导出excel z的更多相关文章

  1. 通用导出excel

    循环导出所有行和列 def export_excel(table_name): host,user,passwd,db='192.168.0.12','root','myjcyf','us_sys' ...

  2. POI通用导出Excel数据(包括样式设计)

    前言 前一段时间我写过通用的导入Excel,前几天也写了导出pdf格式的,还有我之前搞得导出Word,我在之前的博客也都介绍了导出和导入是一个道理,无非是一个获取一个是赋值.昨天有一位同仁看了我的Ex ...

  3. 通过注解实现通用导出Excel

    Javaweb开发中数据的导入导出很常见,每次我们都需要写很多代码,所以我就在想能不能写一些通用的方法,之前已经在网上 整理过一些通用的方法,最近在网上看到一位牛人封装的更加简介,自己拿过来整理了一下 ...

  4. 利用反射实现通用的excel导入导出

    如果一个项目中存在多种信息的导入导出,为了简化代码,就需要用反射实现通用的excel导入导出 实例代码如下: 1.创建一个 Book类,并编写set和get方法 package com.bean; p ...

  5. NPOI MVC 模型导出Excel通用类

    通用类: public enum DataTypeEnum { Int = , Float = , Double = , String = , DateTime = , Date = } public ...

  6. MVC NPOI Linq导出Excel通用类

    之前写了一个模型导出Excel通用类,但是在实际应用中,可能不是直接导出模型,而是通过Linq查询后获取到最终结果再导出 通用类: public enum DataTypeEnum { Int = , ...

  7. NPOI导入导出EXCEL通用类,供参考,可直接使用在WinForm项目中

    以下是NPOI导入导出EXCEL通用类,是在别人的代码上进行优化的,兼容xls与xlsx文件格式,供参考,可直接使用在WinForm项目中,由于XSSFWorkbook类型的Write方法限制,Wri ...

  8. 一个通用的DataGridView导出Excel扩展方法(支持列数据格式化)

    假如数据库表中某个字段存放的值“1”和“0”分别代表“是”和“否”,要在DataGridView中显示“是”和“否”,一般用两种方法,一种是在sql中直接判断获取,另一种是在DataGridView的 ...

  9. gridcontrol显示行号,总行,打印,导出Excel,设置标头及内容居中方法

    1.一般为了表格显示数据更直观,经常会显示行号以及总数.让gridcontrol显示行号,首先你需要设置一下显示行号的宽度,也就是IndicatorWith.默认值为-1,可根据实际数值需要设置宽度, ...

随机推荐

  1. .net中大数据的处理

    前提:sqlserver数据库 问题:需要从数据量达千万级或是更大的数据库中找出一条需要的数据. 1,先分析大数据的结构,以及数据的流向.以及此过程中那些地方会有瓶颈. 2,针对瓶颈制定方案: 1.1 ...

  2. Java中的数组

    1,可以创建自己的类的数组,但是自己的类必须实现get()和put函数 2,声明数组:int[] arrayOfInt.注意,定义数组时不可以指定大小 3,创建与初始化:通过new.arrayOfIn ...

  3. redhat6.4安装storm集群-4节点

    0.搭建ftp服务器并建立yum源 1.在每个节点上安装java并设置环境变量 2.在三个节点上安装zookeeper 3.安装zeromq 过程中发现运行./configure时出现问题: conf ...

  4. enmo_day_02

    Secure CRT, putty, 等终端工具 DML :u, d, i, m 增,删,改,合并 DDL : DCL : DQL : 数据字典 :存放在数据文件中,SYSTEM表空间里,纪录数据的变 ...

  5. MYSQL中关于日期处理的函数

    < DOCTYPE HTML PUBLIC -WCDTD HTML TransitionalEN> MySQL数据库中SQL语句中 关于日期.时间\时间戳的函数   一 MySQL 获得当 ...

  6. JVM-并发-线程

    线程 1.线程的实现 (1)实现线程主要有3中方式:使用内核线程实现,使用用户线程实现和使用用户线程加轻量级进程混合实现. (2)使用内核线程实现 内核线程就是直接由操作系统内核支持的线程,这种线程由 ...

  7. 个人开发者做一款Android App需要知道的事情

    个人开发者做一款Android App需要知道的事情 在大学时, 自己是学计算机专业的,而且还和老师一起做过一年半的项目. 有时候是不是有这样的想法,做一个自己的网站.但一直未付诸行动.2012年时, ...

  8. ACE - ACE_Task源码剖析及线程池实现

    原文出自http://www.cnblogs.com/binchen-china,禁止转载. 上篇提到用Reactor模式,利用I/O复用,获得Socket数据并且实现I/O层单线程并发,和dispa ...

  9. Python开发库

    在我多年的 Python 编程经历以及在 Github 上的探索漫游过程中,我发掘到一些很不错的 Python 开发包,这些包大大简化了开发过程,而本文就是为了向大家推荐这些开发包. 请注意我特别排除 ...

  10. 修改xubuntu14.04(同适用ubuntu)下Eclipse默认的黑色注释

    终端输入:sudo gedit /usr/share/themes/Ambiance/gtk-2.0/gtkrc 第一行将看到如下内容: gtk-color-scheme = "base_c ...