界面组件DevExpress WPF中文教程 - 如何从CRTX模板文件导入图表设置

DevExpress WPF 拥有120+个控件和库,将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpress WPF能创建有着强大互动功能的XAML基础应用程序,这些应用程序专注于当代客户的需求和构建未来新一代支持触摸的解决方案。 无论是Office办公软件的衍伸产品,还是以数据为中心的商业智能产品,都能通过DevExpress WPF控件来实现。

在v23.2版本周期中,DevExpress引入了一系列电子表格图表控件增强功能,在这篇文章中,我们将解释如何将现有的Excel图表模板(.crtx文件)应用于生成的图表对象。

DevExpress WPF v23.2正式版下载(Q技术交流:532598169)

CRTX是一种描述图表内容的特殊文件格式,它是一个XML文件包,用于存储颜色、轴、序列、网格线、类别、图例、文本和其他图表设置/选项。您可以将自定义图表布局保存为Microsoft Excel、Outlook、PowerPoint或Word中的图表模板文件(.crtx)。当您单击图表并为图表模板文件指定名称/位置时,选择Save as Template命令。保存后,您可以在不同的机器/应用程序之间共享模板,来应用您设计的图表外观。

DevExpress用新的方法扩展了Spreadsheet Document API,允许用户从图表模板文件中导入和应用图标设置。AddFromTemplate方法从模板创建图表,LoadTemplate方法将模板设置应用于现有的图表。这个新功能允许您使用图表(保存为模板)作为其他类似图表的基础,或者将预定义的图表样式应用于文档中的所有图表。

下面的示例创建了两个图表,并使用LoadTemplate和AddFromTemplate方法应用存储在模板中的设置。

cs 复制代码
// ...
spreadsheetControl1.LoadDocument("Document.xlsx");
IWorkbook workbook = spreadsheetControl1.Document;
workbook.Worksheets.ActiveWorksheet = workbook.Worksheets["Sheet2"];

// Create a chart, bind it to data, and locate in a Worksheet.
DevExpress.Spreadsheet.Charts.Chart chartProductSales = spreadsheetControl1.ActiveWorksheet.Charts.Add(ChartType.ColumnClustered);
chartProductSales.TopLeftCell = spreadsheetControl1.ActiveWorksheet.Cells["F1"];
chartProductSales.BottomRightCell = spreadsheetControl1.ActiveWorksheet.Cells["K12"];
chartProductSales.Series.Add(spreadsheetControl1.ActiveWorksheet["A1:A4"], spreadsheetControl1.ActiveWorksheet["B1:B4"]);

// Specify title settings.
chartProductSales.Title.SetValue("Sales by Products");
chartProductSales.Title.Font.Italic = true;

// Create a chart, bind it to data, and locate in a Worksheet.
DevExpress.Spreadsheet.Charts.Chart chartSalesbyRegion = spreadsheetControl1.ActiveWorksheet.Charts.Add(ChartType.ColumnClustered);
chartSalesbyRegion.TopLeftCell = spreadsheetControl1.ActiveWorksheet.Cells["F14"];
chartSalesbyRegion.BottomRightCell = spreadsheetControl1.ActiveWorksheet.Cells["K26"];
chartSalesbyRegion.Series.Add(spreadsheetControl1.ActiveWorksheet["C1:C10"], spreadsheetControl1.ActiveWorksheet["D1:D10"]);

// Specify title settings.
chartSalesbyRegion.Title.SetValue("Sales by Region");
chartSalesbyRegion.Title.Font.Italic = true;

生成的图表将呈现如下:

调用LoadTemplate()方法将图表模板设置应用于生成的图表:

cs 复制代码
using (FileStream stream = new FileStream("Chart1.crtx", FileMode.Open)) {
foreach (var chart in spreadsheetControl1.ActiveWorksheet.Charts) {
stream.Position = 0;
chart.LoadTemplate(stream);
}
}

输出如下所示:

要使用AddFromTemplate()实现相同的结果,请执行以下代码片段。在这种情况下,您不需要在应用模板中的设置之前创建图表对象:

cs 复制代码
// ...
spreadsheetControl1.LoadDocument("Document.xlsx");
IWorkbook workbook = spreadsheetControl1.Document;
workbook.Worksheets.ActiveWorksheet = workbook.Worksheets["Sheet2"];

using (FileStream stream = new FileStream("Chart1.crtx", FileMode.Open)){
stream.Position = 0;
// Create a new chart object, bind it to data, and apply template setitngs.
var chartProductSales = spreadsheetControl1.ActiveWorksheet.Charts.AddFromTemplate(stream, spreadsheetControl1.ActiveWorksheet["A1:B4"]);

// Locate the chart in a Worksheet.
spreadsheetControl1.ActiveWorksheet.Charts[0].TopLeftCell = spreadsheetControl1.ActiveWorksheet.Cells["F1"];
spreadsheetControl1.ActiveWorksheet.Charts[0].BottomRightCell = spreadsheetControl1.ActiveWorksheet.Cells["K12"];

// Specify title settings.
spreadsheetControl1.ActiveWorksheet.Charts[0].Title.SetValue("Sales by Product");
spreadsheetControl1.ActiveWorksheet.Charts[0].Title.Font.Italic = true;
stream.Position = 0;

// Create a new chart object, bind it to data, and apply template setitngs.
var chartSalesbyRegion = spreadsheetControl1.ActiveWorksheet.Charts.AddFromTemplate(stream,
spreadsheetControl1.ActiveWorksheet["C1:D10"]);

// Locate the chart in a Worksheet.
spreadsheetControl1.ActiveWorksheet.Charts[1].TopLeftCell = spreadsheetControl1.ActiveWorksheet.Cells["F14"];
spreadsheetControl1.ActiveWorksheet.Charts[1].BottomRightCell = spreadsheetControl1.ActiveWorksheet.Cells["K26"];

// Specify title settings.
spreadsheetControl1.ActiveWorksheet.Charts[1].Title.SetValue("Sales by Region");
spreadsheetControl1.ActiveWorksheet.Charts[1].Title.Font.Italic = true;
}

新方法简化了图表生成过程------消除了每个图表对象的重复。

注意:新API附带了与图表类型和数据相关的限制,更多信息请参考方法描述:

相关推荐
A_nanda7 小时前
c# MOdbus rto读写串口,如何不相互影响
算法·c#·多线程
码云数智-园园9 小时前
使用 C# 将 PowerPoint 演示文稿高效转换为 PDF 格式
c#
听麟10 小时前
HarmonyOS 6.0+ 智慧出行导航APP开发实战:离线地图与多设备位置协同落地
华为·wpf·harmonyos
PfCoder10 小时前
WinForm真入门(23)---PictureBox 控件详细用法
开发语言·windows·c#·winform
gc_229913 小时前
C#学习调用OpenMcdf模块解析ole数据的基本用法(1)
c#·ole·openmcdf
MM_MS17 小时前
Halcon图像点运算、获取直方图、直方图均衡化
图像处理·人工智能·算法·目标检测·计算机视觉·c#·视觉检测
笨蛋不要掉眼泪18 小时前
Spring Boot + RedisTemplate 数据结构的基础操作
java·数据结构·spring boot·redis·wpf
老骥伏枥~19 小时前
C# 控制台:Console.ReadLine / WriteLine
开发语言·c#
PfCoder1 天前
C#中定时器之System.Timers.Timer
c#·.net·visual studio·winform