DevExportTool类 - DevExpress GridView 导出Excel文件通用类

DevExportTool类 - DevExpress GridView 导出Excel文件通用类
功能特点
- 支持Master/Detail主从表表格
- 支持导出PDF,支持中文
DevExportTool类
C# 全选
using CSFrameworkV6.Business;
using DevExpress.Export;
using DevExpress.XtraCharts;
using DevExpress.XtraGrid;
using DevExpress.XtraGrid.Views.Grid;
using DevExpress.XtraPrinting;
using DevExpress.XtraPrintingLinks;
namespace CSFrameworkV6.Library.CommonClass
{
/// <summary>
/// DevExpress通用导出PDF,Excel工具类
/// </summary>
public class DevExportTool
{
/// <summary>
/// 导出Excel
/// </summary>
/// <param name="fileName">文件名</param>
/// <param name="printable">可打印输出的控件,如:GridControl, ChartControl</param>
public void ExportToExcel(string fileName, IPrintable printable)
{
PrintingSystem ps = new PrintingSystem();
CompositeLink link = new CompositeLink(ps);
ps.Links.Add(link);
link.Links.Add(CreatePrintableLink(printable));
link.Landscape = true;//横向
try
{
if (fileName.EndsWith(".xlsx", StringComparison.OrdinalIgnoreCase))
{
XlsxExportOptions options = new XlsxExportOptions();
options.ExportMode = XlsxExportMode.SingleFile;
options.TextExportMode = TextExportMode.Value;
link.ExportToXlsx(fileName, options);
}
else
{
XlsExportOptions options = new XlsExportOptions();
options.ExportMode = XlsExportMode.SingleFile;
options.TextExportMode = TextExportMode.Value;
link.ExportToXls(fileName, options);
}
}
catch (Exception ex)
{
DevExpress.XtraEditors.XtraMessageBox.Show(ex.Message);
}
}
public void ExportToDocx(string fileName, GridControl printable)
{
PrintingSystem ps = new PrintingSystem();
CompositeLink link = new CompositeLink(ps);
ps.Links.Add(link);
link.Links.Add(CreatePrintableLink(printable));
link.Landscape = true;//横向
try
{
DocxExportOptions options = new DocxExportOptions();
options.ExportMode = DocxExportMode.SingleFile;
options.KeepRowHeight = true;
options.TableLayout = true;
link.ExportToDocx(fileName, options);
}
catch (Exception ex)
{
DevExpress.XtraEditors.XtraMessageBox.Show(ex.Message);
}
}
/// <summary>
/// 导出PDF
/// </summary>
/// <param name="fileName"></param>
/// <param name="printable"></param>
public void ExportToPDF(string fileName, GridView gv, IPrintable printable, Models.PrintPaperModel paperOptions)
{
var gc = gv.GridControl;
// 强制 PDF 导出引擎使用和打印预览一样的 GDI+ 换行算法
DevExpress.XtraPrinting.Native.PrintingSettings.UseGdiPlusLineBreakAlgorithm = true;
// 2. 统一打印中文字体
Font fontCn = new Font("微软雅黑", 9, FontStyle.Regular);
// 可选:子视图也强制展开
foreach (GridView view in gc.Views)
{
// 必须true:强制打印使用AppearancePrint样式,否则表头沿用界面字体(PDF不兼容中文)
view.OptionsPrint.UsePrintStyles = true;
view.OptionsPrint.PrintHeader = true;
// 表头打印样式(解决表头空白核心)
view.AppearancePrint.HeaderPanel.Options.UseFont = true;
view.AppearancePrint.HeaderPanel.Font = fontCn;
// 数据行
view.AppearancePrint.Row.Options.UseFont = true;
view.AppearancePrint.Row.Font = fontCn;
view.OptionsPrint.PrintDetails = true;
view.OptionsPrint.ExpandAllDetails = true;
view.OptionsPrint.AutoWidth = false;
view.OptionsPrint.PrintFooter = SystemSettings.Current.ExportXlsxPrintFooter; //不导出底部汇总行
view.BestFitColumns();
}
// 1. 主视图:允许打印明细、全部展开明细
gv.OptionsPrint.PrintDetails = true; // 导出明细
gv.OptionsPrint.ExpandAllDetails = true; // 强制展开所有明细
using (var ps = new PrintingSystem())
using (var link = new PrintableComponentLink(ps))
{
link.Component = gc;
//纸张A4/A3
link.PaperKind = Enum.Parse<System.Drawing.Printing.PaperKind>(paperOptions.PaperName);
//Landscape = true = 纸张 横向打印 / 导出
//Landscape = false = 纸张 纵向打印 / 导出
link.Landscape = paperOptions.PaperDirection == "横向";
// 边距(可选)
link.Margins.Left = paperOptions.MarginLeft;
link.Margins.Right = paperOptions.MarginRight;
link.Margins.Top = paperOptions.MarginTop;
link.Margins.Bottom = paperOptions.MarginBottom;
PdfExportOptions options = new PdfExportOptions
{
NeverEmbeddedFonts = "",
ConvertImagesToJpeg = true,
ImageQuality = PdfJpegImageQuality.High,
};
// 导出 PDF
link.CreateDocument();
link.ExportToPdf(fileName, options);
}
}
/// <summary>
/// 创建打印Componet
/// </summary>
/// <param name="printable"></param>
/// <returns></returns>
PrintableComponentLink CreatePrintableLink(IPrintable printable)
{
//图表组件
if (printable is ChartControl chart)
{
chart.OptionsPrint.SizeMode = DevExpress.XtraCharts.Printing.PrintSizeMode.None;
}
//表格组件
if (printable is GridControl grid)
{
//
}
PrintableComponentLink printableLink = new PrintableComponentLink() { Component = printable };
return printableLink;
}
/// <summary>
/// 导出主从表表格数据
/// </summary>
/// <param name="fileName"></param>
/// <param name="gv"></param>
public void ExportToExcel_MasterDetail(string fileName, GridView gv)
{
var gc = gv.GridControl;
// 可选:子视图也强制展开
foreach (GridView view in gc.Views)
{
view.OptionsPrint.PrintDetails = true;
view.OptionsPrint.ExpandAllDetails = true;
view.OptionsPrint.AutoWidth = false;
view.OptionsPrint.PrintFooter = SystemSettings.Current.ExportXlsxPrintFooter; //不导出底部汇总行
view.BestFitColumns();
}
// 1. 主视图:允许打印明细、全部展开明细
gv.OptionsPrint.PrintDetails = true; // 导出明细
gv.OptionsPrint.ExpandAllDetails = true; // 强制展开所有明细
// 2. 导出选项:切到 WYSIWYG(v22.1 唯一能导出明细的模式)
var opt = new XlsxExportOptionsEx
{
ExportType = ExportType.WYSIWYG, // 核心:必须设为 WYSIWYG
TextExportMode = TextExportMode.Value
};
using (var ps = new PrintingSystem())
using (var link = new PrintableComponentLink(ps))
{
link.Component = gc;
// 执行导出
link.ExportToXlsx(fileName, opt);
}
}
}
}
使用方法
C# 全选
new DevExportTool().ExportToExcel(文件名, GridControl组件名称);

版权声明:本文为开发框架文库发布内容,转载请附上原文出处连接
NewDoc C/S框架网





