DevExpress WPF 擁有120+個控件和庫,將幫助您交付滿足甚至超出企業需求的高性能業務應用程序。通過DevExpress WPF能創建有着強大互動功能的XAML基礎應用程序,這些應用程序專注於當代客戶的需求和構建未來新一代支持觸摸的解決方案。 無論是Office辦公軟件的衍伸產品,還是以數據爲中心的商業智能產品,都能通過DevExpress WPF控件來實現。
在v23.2版本週期中,DevExpress引入了一系列電子表格圖表控件增強功能,在這篇文章中,我們將解釋如何將現有的Excel圖表模板(.crtx文件)應用於生成的圖表對象。
CRTX是一種描述圖表內容的特殊文件格式,它是一個XML文件包,用於存儲顏色、軸、序列、網格線、類別、圖例、文本和其他圖表設置/選項。您可以將自定義圖表佈局保存爲Microsoft Excel、Outlook、PowerPoint或Word中的圖表模板文件(.crtx)。當您單擊圖表併爲圖表模板文件指定名稱/位置時,選擇Save as Template命令。保存後,您可以在不同的機器/應用程序之間共享模板,來應用您設計的圖表外觀。
DevExpress用新的方法擴展了Spreadsheet Document API,允許用戶從圖表模板文件中導入和應用圖標設置。AddFromTemplate方法從模板創建圖表,LoadTemplate方法將模板設置應用於現有的圖表。這個新功能允許您使用圖表(保存爲模板)作爲其他類似圖表的基礎,或者將預定義的圖表樣式應用於文檔中的所有圖表。
下面的示例創建了兩個圖表,並使用LoadTemplate和AddFromTemplate方法應用存儲在模板中的設置。
// ... 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()方法將圖表模板設置應用於生成的圖表:
using (FileStream stream = new FileStream("Chart1.crtx", FileMode.Open)) { foreach (var chart in spreadsheetControl1.ActiveWorksheet.Charts) { stream.Position = 0; chart.LoadTemplate(stream); } }
輸出如下所示:
要使用AddFromTemplate()實現相同的結果,請執行以下代碼片段。在這種情況下,您不需要在應用模板中的設置之前創建圖表對象:
// ... 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附帶了與圖表類型和數據相關的限制,更多信息請參考方法描述: