Erstellen Sie ein Diagramm, indem Sie Smart-Marker verarbeiten
Aspose.Cells APIs bieten dieWorkbookDesignerKlasse, um mit Smart Markern zu arbeiten, bei denen die Formatierungen und Formeln in den Designer-Tabellen platziert und dann verarbeitet werdenWorkbookDesignerKlasse, um die Daten gemäß den angegebenen Smart Markern aufzufüllen. Es ist auch möglich, Excel-Diagramme durch die Verarbeitung von Smart Markern zu erstellen, was die folgenden Schritte erfordert.
- Erstellung von Designer-Tabellenkalkulationen
- Verarbeitung des Designer-Arbeitsblatts anhand der angegebenen Datenquelle
- Erstellung von Diagrammen basierend auf ausgefüllten Daten
Erstellung einer Designer-Tabelle
Eine Designer-Tabelle ist eine einfache Excel-Datei, die mit der Excel-Anwendung Microsoft oder den APIs Aspose.Cells erstellt wurde und die visuelle Formatierung, Formeln und intelligente Markierungen enthält, in die der Inhalt zur Laufzeit eingefügt werden kann.
Der Einfachheit halber erstellen wir das Designer-Arbeitsblatt mit Aspose.Cells for .NET API und verarbeiten es später zu Demonstrationszwecken gegen eine dynamisch erstellte Datenquelle.
// For complete examples and data files, please go to https://github.com/aspose-cells/Aspose.Cells-for-.NET | |
// The path to the documents directory. | |
string dataDir = RunExamples.GetDataDir(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); | |
// Create an instance of Workbook | |
var book = new Workbook(); | |
// Access the first, default Worksheet by passing its index | |
var dataSheet = book.Worksheets[0]; | |
// Name the Worksheet for later reference | |
dataSheet.Name = "ChartData"; | |
// Access the CellsCollection of first Worksheet | |
var cells = dataSheet.Cells; | |
// Insert static data (headers) | |
cells["B1"].PutValue("Item 1"); | |
cells["C1"].PutValue("Item 2"); | |
cells["D1"].PutValue("Item 3"); | |
cells["E1"].PutValue("Item 4"); | |
cells["F1"].PutValue("Item 5"); | |
cells["G1"].PutValue("Item 6"); | |
cells["H1"].PutValue("Item 7"); | |
cells["I1"].PutValue("Item 8"); | |
cells["J1"].PutValue("Item 9"); | |
cells["K1"].PutValue("Item 10"); | |
cells["L1"].PutValue("Item 11"); | |
cells["M1"].PutValue("Item 12"); | |
// Place Smart Markers | |
cells["A2"].PutValue("&=Sales.Year"); | |
cells["B2"].PutValue("&=Sales.Item1"); | |
cells["C2"].PutValue("&=Sales.Item2"); | |
cells["D2"].PutValue("&=Sales.Item3"); | |
cells["E2"].PutValue("&=Sales.Item4"); | |
cells["F2"].PutValue("&=Sales.Item5"); | |
cells["G2"].PutValue("&=Sales.Item6"); | |
cells["H2"].PutValue("&=Sales.Item7"); | |
cells["I2"].PutValue("&=Sales.Item8"); | |
cells["J2"].PutValue("&=Sales.Item9"); | |
cells["K2"].PutValue("&=Sales.Item10"); | |
cells["L2"].PutValue("&=Sales.Item11"); | |
cells["M2"].PutValue("&=Sales.Item12"); |
Designer-Tabelle verarbeiten
Um das Designer-Arbeitsblatt zu verarbeiten, muss man über eine Datenquelle verfügen, die den in dem Designer-Arbeitsblatt verwendeten Smart Markern entspricht. Beispielsweise haben wir einen Smart-Marker-Eintrag als &=Sales.Year erstellt, der die Year-Spalte in der DataTable Sales darstellt. Falls eine entsprechende Spalte in der Datenquelle nicht verfügbar ist, überspringen die Aspose.Cells-APIs die Verarbeitung für diese bestimmte Smart-Markierung, und folglich werden die Daten für die bestimmte Smart-Markierung nicht ausgefüllt.
Um diesen Anwendungsfall zu demonstrieren, erstellen wir die Datenquelle von Grund auf neu und verarbeiten sie mit der im vorherigen Schritt erstellten Designer-Tabelle. In einem Echtzeitszenario könnten Daten jedoch bereits zur weiteren Verarbeitung verfügbar sein, sodass Sie die Erstellung einer Datenquelle überspringen können, wenn bereits Daten verfügbar sind.
// For complete examples and data files, please go to https://github.com/aspose-cells/Aspose.Cells-for-.NET | |
// Create an instance of DataTable and name is according to the Smart Markers | |
var table = new DataTable("Sales"); | |
/* | |
* Add columns to the newly created DataTable while specifying the column type | |
* It is important that the DataTable should have at least one column for each | |
* Smart Marker entry from the designer spreadsheet | |
*/ | |
table.Columns.Add("Year", typeof(string)); | |
table.Columns.Add("Item1", typeof(int)); | |
table.Columns.Add("Item2", typeof(int)); | |
table.Columns.Add("Item3", typeof(int)); | |
table.Columns.Add("Item4", typeof(int)); | |
table.Columns.Add("Item5", typeof(int)); | |
table.Columns.Add("Item6", typeof(int)); | |
table.Columns.Add("Item7", typeof(int)); | |
table.Columns.Add("Item8", typeof(int)); | |
table.Columns.Add("Item9", typeof(int)); | |
table.Columns.Add("Item10", typeof(int)); | |
table.Columns.Add("Item11", typeof(int)); | |
table.Columns.Add("Item12", typeof(int)); | |
// Add some rows with data to the DataTable | |
table.Rows.Add("2000", 2310, 0, 110, 15, 20, 25, 30, 1222, 200, 421, 210, 133); | |
table.Rows.Add("2005", 1508, 0, 170, 280, 190, 400, 105, 132, 303, 199, 120, 100); | |
table.Rows.Add("2010", 0, 210, 230, 140, 150, 160, 170, 110, 1999, 1229, 1120, 2300); | |
table.Rows.Add("2015", 3818, 320, 340, 260, 210, 310, 220, 0, 0, 0, 0, 122); |
Die Verarbeitung von Smart Markern ist recht einfach, wie das folgende Code-Snippet zeigt.
// For complete examples and data files, please go to https://github.com/aspose-cells/Aspose.Cells-for-.NET | |
// The path to the documents directory. | |
string dataDir = RunExamples.GetDataDir(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); | |
// Create an instance of Workbook | |
var book = new Workbook(); | |
// Access the first, default Worksheet by passing its index | |
var dataSheet = book.Worksheets[0]; | |
// Name the Worksheet for later reference | |
dataSheet.Name = "ChartData"; | |
// Access the CellsCollection of first Worksheet | |
var cells = dataSheet.Cells; | |
// Insert static data (headers) | |
cells["B1"].PutValue("Item 1"); | |
cells["C1"].PutValue("Item 2"); | |
cells["D1"].PutValue("Item 3"); | |
cells["E1"].PutValue("Item 4"); | |
cells["F1"].PutValue("Item 5"); | |
cells["G1"].PutValue("Item 6"); | |
cells["H1"].PutValue("Item 7"); | |
cells["I1"].PutValue("Item 8"); | |
cells["J1"].PutValue("Item 9"); | |
cells["K1"].PutValue("Item 10"); | |
cells["L1"].PutValue("Item 11"); | |
cells["M1"].PutValue("Item 12"); | |
// Place Smart Markers | |
cells["A2"].PutValue("&=Sales.Year"); | |
cells["B2"].PutValue("&=Sales.Item1"); | |
cells["C2"].PutValue("&=Sales.Item2"); | |
cells["D2"].PutValue("&=Sales.Item3"); | |
cells["E2"].PutValue("&=Sales.Item4"); | |
cells["F2"].PutValue("&=Sales.Item5"); | |
cells["G2"].PutValue("&=Sales.Item6"); | |
cells["H2"].PutValue("&=Sales.Item7"); | |
cells["I2"].PutValue("&=Sales.Item8"); | |
cells["J2"].PutValue("&=Sales.Item9"); | |
cells["K2"].PutValue("&=Sales.Item10"); | |
cells["L2"].PutValue("&=Sales.Item11"); | |
cells["M2"].PutValue("&=Sales.Item12"); | |
// Create an instance of DataTable and name is according to the Smart Markers | |
var table = new DataTable("Sales"); | |
/* | |
* Add columns to the newly created DataTable while specifying the column type | |
* It is important that the DataTable should have at least one column for each | |
* Smart Marker entry from the designer spreadsheet | |
*/ | |
table.Columns.Add("Year", typeof(string)); | |
table.Columns.Add("Item1", typeof(int)); | |
table.Columns.Add("Item2", typeof(int)); | |
table.Columns.Add("Item3", typeof(int)); | |
table.Columns.Add("Item4", typeof(int)); | |
table.Columns.Add("Item5", typeof(int)); | |
table.Columns.Add("Item6", typeof(int)); | |
table.Columns.Add("Item7", typeof(int)); | |
table.Columns.Add("Item8", typeof(int)); | |
table.Columns.Add("Item9", typeof(int)); | |
table.Columns.Add("Item10", typeof(int)); | |
table.Columns.Add("Item11", typeof(int)); | |
table.Columns.Add("Item12", typeof(int)); | |
// Add some rows with data to the DataTable | |
table.Rows.Add("2000", 2310, 0, 110, 15, 20, 25, 30, 1222, 200, 421, 210, 133); | |
table.Rows.Add("2005", 1508, 0, 170, 280, 190, 400, 105, 132, 303, 199, 120, 100); | |
table.Rows.Add("2010", 0, 210, 230, 140, 150, 160, 170, 110, 1999, 1229, 1120, 2300); | |
table.Rows.Add("2015", 3818, 320, 340, 260, 210, 310, 220, 0, 0, 0, 0, 122); | |
// Create an instance of WorkbookDesigner class | |
var designer = new WorkbookDesigner(); | |
// Assign the Workbook property to the instance of Workbook created in first step | |
designer.Workbook = book; | |
// Set the data source | |
designer.SetDataSource(table); | |
// Call Process method to populate data | |
designer.Process(); |
Erstellung von Diagrammen
Sobald die Daten vorhanden sind, müssen wir nur noch ein Diagramm basierend auf der Datenquelle erstellen. Um das Beispiel einfach zu halten, verwenden wir dieChart.SetChartDataRange-Methode, sodass wir das Diagramm nicht weiter konfigurieren müssen.
// For complete examples and data files, please go to https://github.com/aspose-cells/Aspose.Cells-for-.NET | |
// The path to the documents directory. | |
string dataDir = RunExamples.GetDataDir(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); | |
// Create an instance of Workbook | |
var book = new Workbook(); | |
// Access the first, default Worksheet by passing its index | |
var dataSheet = book.Worksheets[0]; | |
// Name the Worksheet for later reference | |
dataSheet.Name = "ChartData"; | |
// Access the CellsCollection of first Worksheet | |
var cells = dataSheet.Cells; | |
// Insert static data (headers) | |
cells["B1"].PutValue("Item 1"); | |
cells["C1"].PutValue("Item 2"); | |
cells["D1"].PutValue("Item 3"); | |
cells["E1"].PutValue("Item 4"); | |
cells["F1"].PutValue("Item 5"); | |
cells["G1"].PutValue("Item 6"); | |
cells["H1"].PutValue("Item 7"); | |
cells["I1"].PutValue("Item 8"); | |
cells["J1"].PutValue("Item 9"); | |
cells["K1"].PutValue("Item 10"); | |
cells["L1"].PutValue("Item 11"); | |
cells["M1"].PutValue("Item 12"); | |
// Place Smart Markers | |
cells["A2"].PutValue("&=Sales.Year"); | |
cells["B2"].PutValue("&=Sales.Item1"); | |
cells["C2"].PutValue("&=Sales.Item2"); | |
cells["D2"].PutValue("&=Sales.Item3"); | |
cells["E2"].PutValue("&=Sales.Item4"); | |
cells["F2"].PutValue("&=Sales.Item5"); | |
cells["G2"].PutValue("&=Sales.Item6"); | |
cells["H2"].PutValue("&=Sales.Item7"); | |
cells["I2"].PutValue("&=Sales.Item8"); | |
cells["J2"].PutValue("&=Sales.Item9"); | |
cells["K2"].PutValue("&=Sales.Item10"); | |
cells["L2"].PutValue("&=Sales.Item11"); | |
cells["M2"].PutValue("&=Sales.Item12"); | |
// Create an instance of DataTable and name is according to the Smart Markers | |
var table = new DataTable("Sales"); | |
/* | |
* Add columns to the newly created DataTable while specifying the column type | |
* It is important that the DataTable should have at least one column for each | |
* Smart Marker entry from the designer spreadsheet | |
*/ | |
table.Columns.Add("Year", typeof(string)); | |
table.Columns.Add("Item1", typeof(int)); | |
table.Columns.Add("Item2", typeof(int)); | |
table.Columns.Add("Item3", typeof(int)); | |
table.Columns.Add("Item4", typeof(int)); | |
table.Columns.Add("Item5", typeof(int)); | |
table.Columns.Add("Item6", typeof(int)); | |
table.Columns.Add("Item7", typeof(int)); | |
table.Columns.Add("Item8", typeof(int)); | |
table.Columns.Add("Item9", typeof(int)); | |
table.Columns.Add("Item10", typeof(int)); | |
table.Columns.Add("Item11", typeof(int)); | |
table.Columns.Add("Item12", typeof(int)); | |
// Add some rows with data to the DataTable | |
table.Rows.Add("2000", 2310, 0, 110, 15, 20, 25, 30, 1222, 200, 421, 210, 133); | |
table.Rows.Add("2005", 1508, 0, 170, 280, 190, 400, 105, 132, 303, 199, 120, 100); | |
table.Rows.Add("2010", 0, 210, 230, 140, 150, 160, 170, 110, 1999, 1229, 1120, 2300); | |
table.Rows.Add("2015", 3818, 320, 340, 260, 210, 310, 220, 0, 0, 0, 0, 122); | |
// Create an instance of WorkbookDesigner class | |
var designer = new WorkbookDesigner(); | |
// Assign the Workbook property to the instance of Workbook created in first step | |
designer.Workbook = book; | |
// Set the data source | |
designer.SetDataSource(table); | |
// Call Process method to populate data | |
designer.Process(); | |
/* | |
* Save the number of rows & columns from the source DataTable in seperate variables. | |
* These values will be used later to identify the chart's data range from DataSheet | |
*/ | |
int chartRows = table.Rows.Count; | |
int chartCols = table.Columns.Count; | |
// Add a new Worksheet of type Chart to Workbook | |
int chartSheetIdx = book.Worksheets.Add(SheetType.Chart); | |
// Access the newly added Worksheet via its index | |
var chartSheet = book.Worksheets[chartSheetIdx]; | |
// Name the Worksheet | |
chartSheet.Name = "Chart"; | |
// Add a chart of type ColumnStacked to newly added Worksheet | |
int chartIdx = chartSheet.Charts.Add(ChartType.ColumnStacked, 0, 0, chartRows, chartCols); | |
// Access the newly added Chart via its index | |
var chart = chartSheet.Charts[chartIdx]; | |
// Set the data range for the chart | |
chart.SetChartDataRange(dataSheet.Name + "!A1:" + CellsHelper.ColumnIndexToName(chartCols - 1) + (chartRows + 1).ToString(), false); | |
// Set the chart to size with window | |
chart.SizeWithWindow = true; | |
// Set the format for the tick labels | |
chart.ValueAxis.TickLabels.NumberFormat = "$###,### K"; | |
// Set chart title | |
chart.Title.Text = "Sales Summary"; | |
// Set ChartSheet an active sheet | |
book.Worksheets.ActiveSheetIndex = chartSheetIdx; | |
// Save the final result | |
book.Save(dataDir + "report_out.xlsx"); |