1.通用方法
/// <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;
}
2.调用方法
us.ExportToExcel("excel", this.gridControl1);
3.dev设置列自适应
4.DevExpress Winform GridControl GridView 主从表(Master-Detail)导出Excel问题
gridView1.OptionsPrint.PrintDetails = true;//导出明细
gridView1.OptionsPrint.ExpandAllDetails = true;//导出所有明细,false的话,只会导出展开的明细
参考链接
主从表excel导出
关于DevExpress Winform GridControl GridView 主从表(Master-Detail)导出Excel问题_涛神-Dev 的博客-CSDN博客
通用excel导出
DevExpress WinForm通用控件导出Excel方法(支持多个控件分工作薄导出)_涛神-Dev 的博客-CSDN博客