Skapa dynamiska diagram
Dynamiska (eller interaktiva) diagram har möjlighet att ändras när du ändrar dataomfånget. Med andra ord kan de dynamiska diagrammen automatiskt återspegla ändringar när datakällan ändras. För att utlösa förändringen i datakällan kan man använda filtreringsalternativet i Excel-tabeller eller använda en kontroll som ComboBox eller Dropdown-lista.
Den här artikeln visar användningen av Aspose.Cells for .NET API:er för att skapa dynamiska diagram med båda de ovannämnda metoderna.
Använda Excel-tabeller
ListObjects tillhandahåller den inbyggda funktionen för att sortera och filtrera data vid användarinteraktion. Både sorterings- och filtreringsalternativ tillhandahålls via rullgardinslistorna som automatiskt läggs till i rubrikraden iListObject . På grund av dessa funktioner (sortering och filtrering),ListObjectverkar vara den perfekta kandidaten för att fungera som datakälla för ett dynamiskt diagram eftersom när sortering eller filtrering ändras kommer representationen av data i diagrammet att ändras för att återspegla det aktuella tillståndet förListObject.
För att hålla demonstrationen enkel att förstå kommer vi att skapaArbetsbokfrån början och gå framåt steg för steg enligt beskrivningen nedan.
- Skapa en tomArbetsbok.
- Få tillgång tillCells av den förstaArbetsblad iArbetsbok.
- Infoga lite data i cellerna.
- SkapaListObjectbaserat på de infogade uppgifterna.
- SkapaDiagram baserat på dataintervallet förListObject.
- Spara resultatet på skivan.
// 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 first worksheet from the collection | |
var sheet = book.Worksheets[0]; | |
// Access cells collection of the first worksheet | |
var cells = sheet.Cells; | |
// Insert data column wise | |
cells["A1"].PutValue("Category"); | |
cells["A2"].PutValue("Fruit"); | |
cells["A3"].PutValue("Fruit"); | |
cells["A4"].PutValue("Fruit"); | |
cells["A5"].PutValue("Fruit"); | |
cells["A6"].PutValue("Vegetables"); | |
cells["A7"].PutValue("Vegetables"); | |
cells["A8"].PutValue("Vegetables"); | |
cells["A9"].PutValue("Vegetables"); | |
cells["A10"].PutValue("Beverages"); | |
cells["A11"].PutValue("Beverages"); | |
cells["A12"].PutValue("Beverages"); | |
cells["B1"].PutValue("Food"); | |
cells["B2"].PutValue("Apple"); | |
cells["B3"].PutValue("Banana"); | |
cells["B4"].PutValue("Apricot"); | |
cells["B5"].PutValue("Grapes"); | |
cells["B6"].PutValue("Carrot"); | |
cells["B7"].PutValue("Onion"); | |
cells["B8"].PutValue("Cabage"); | |
cells["B9"].PutValue("Potatoe"); | |
cells["B10"].PutValue("Coke"); | |
cells["B11"].PutValue("Coladas"); | |
cells["B12"].PutValue("Fizz"); | |
cells["C1"].PutValue("Cost"); | |
cells["C2"].PutValue(2.2); | |
cells["C3"].PutValue(3.1); | |
cells["C4"].PutValue(4.1); | |
cells["C5"].PutValue(5.1); | |
cells["C6"].PutValue(4.4); | |
cells["C7"].PutValue(5.4); | |
cells["C8"].PutValue(6.5); | |
cells["C9"].PutValue(5.3); | |
cells["C10"].PutValue(3.2); | |
cells["C11"].PutValue(3.6); | |
cells["C12"].PutValue(5.2); | |
cells["D1"].PutValue("Profit"); | |
cells["D2"].PutValue(0.1); | |
cells["D3"].PutValue(0.4); | |
cells["D4"].PutValue(0.5); | |
cells["D5"].PutValue(0.6); | |
cells["D6"].PutValue(0.7); | |
cells["D7"].PutValue(1.3); | |
cells["D8"].PutValue(0.8); | |
cells["D9"].PutValue(1.3); | |
cells["D10"].PutValue(2.2); | |
cells["D11"].PutValue(2.4); | |
cells["D12"].PutValue(3.3); | |
// Create ListObject, Get the List objects collection in the first worksheet | |
var listObjects = sheet.ListObjects; | |
// Add a List based on the data source range with headers on | |
var index = listObjects.Add(0, 0, 11, 3, true); | |
sheet.AutoFitColumns(); | |
// Create chart based on ListObject | |
index = sheet.Charts.Add(ChartType.Column, 21, 1, 35, 18); | |
var chart = sheet.Charts[index]; | |
chart.SetChartDataRange("A1:D12", true); | |
chart.NSeries.CategoryData = "A2:B12"; | |
// Save spreadsheet | |
book.Save(dataDir + "output_out.xlsx"); |
Använda dynamiska formler
Om du inte vill användaListObjectsom en datakälla till det dynamiska diagrammet är det andra alternativet att använda Excel-funktioner (eller formler) för att skapa ett dynamiskt dataområde, och en kontroll (som ComboBox) för att utlösa dataändringen. I det här scenariot kommer vi att använda VLOOKUP-funktionen för att hämta lämpliga värden baserat på valet av ComboBox. När valet ändras, uppdaterar funktionen VLOOKUP cellens värde. Om ett cellintervall använder funktionen VLOOKUP, kan hela intervallet uppdateras vid användarinteraktion, därför kan det användas som en källa till det dynamiska diagrammet.
För att hålla demonstrationen enkel att förstå kommer vi att skapa arbetsboken från början och gå vidare steg för steg enligt beskrivningen nedan.
- Skapa en tomArbetsbok.
- Få tillgång tillCells av den förstaArbetsblad iArbetsbok.
- Infoga några data i cellerna genom att skapa ett namngivet intervall. Dessa data kommer att fungera som en serie till det dynamiska diagrammet.
- SkapaKombinationsrutanbaserat på det namngivna intervallet som skapades i föregående steg.
- Infoga lite mer data till cellerna som kommer att fungera som en källa till UPPSÖKNINGSfunktionen.
- Infoga VLOOKUP-funktionen (med lämpliga parametrar) i ett cellområde. Detta kommer att fungera som en källa till det dynamiska diagrammet.
- SkapaDiagrambaserat på intervallet som skapades i föregående steg.
- Spara resultatet på skivan.
// 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 a workbook object | |
var workbook = new Workbook(); | |
// Get the first worksheet | |
var worksheet = workbook.Worksheets[0]; | |
// Create a range in the second worksheet | |
var range = worksheet.Cells.CreateRange("C21", "C24"); | |
// Name the range | |
range.Name = "MyRange"; | |
// Fill different cells with data in the range | |
range[0, 0].PutValue("North"); | |
range[1, 0].PutValue("South"); | |
range[2, 0].PutValue("East"); | |
range[3, 0].PutValue("West"); | |
ComboBox comboBox = worksheet.Shapes.AddComboBox(15, 0, 2, 0, 17, 64); | |
comboBox.InputRange = "=MyRange"; | |
comboBox.LinkedCell = "=B16"; | |
comboBox.SelectedIndex = 0; | |
Cell cell = worksheet.Cells["B16"]; | |
Style style = cell.GetStyle(); | |
style.Font.Color = Color.White; | |
cell.SetStyle(style); | |
worksheet.Cells["C16"].Formula = "=INDEX(Sheet1!$C$21:$C$24,$B$16,1)"; | |
// Put some data for chart source | |
// Data Headers | |
worksheet.Cells["D15"].PutValue("Jan"); | |
worksheet.Cells["D20"].PutValue("Jan"); | |
worksheet.Cells["E15"].PutValue("Feb"); | |
worksheet.Cells["E20"].PutValue("Feb"); | |
worksheet.Cells["F15"].PutValue("Mar"); | |
worksheet.Cells["F20"].PutValue("Mar"); | |
worksheet.Cells["G15"].PutValue("Apr"); | |
worksheet.Cells["G20"].PutValue("Apr"); | |
worksheet.Cells["H15"].PutValue("May"); | |
worksheet.Cells["H20"].PutValue("May"); | |
worksheet.Cells["I15"].PutValue("Jun"); | |
worksheet.Cells["I20"].PutValue("Jun"); | |
// Data | |
worksheet.Cells["D21"].PutValue(304); | |
worksheet.Cells["D22"].PutValue(402); | |
worksheet.Cells["D23"].PutValue(321); | |
worksheet.Cells["D24"].PutValue(123); | |
worksheet.Cells["E21"].PutValue(300); | |
worksheet.Cells["E22"].PutValue(500); | |
worksheet.Cells["E23"].PutValue(219); | |
worksheet.Cells["E24"].PutValue(422); | |
worksheet.Cells["F21"].PutValue(222); | |
worksheet.Cells["F22"].PutValue(331); | |
worksheet.Cells["F23"].PutValue(112); | |
worksheet.Cells["F24"].PutValue(350); | |
worksheet.Cells["G21"].PutValue(100); | |
worksheet.Cells["G22"].PutValue(200); | |
worksheet.Cells["G23"].PutValue(300); | |
worksheet.Cells["G24"].PutValue(400); | |
worksheet.Cells["H21"].PutValue(200); | |
worksheet.Cells["H22"].PutValue(300); | |
worksheet.Cells["H23"].PutValue(400); | |
worksheet.Cells["H24"].PutValue(500); | |
worksheet.Cells["I21"].PutValue(400); | |
worksheet.Cells["I22"].PutValue(200); | |
worksheet.Cells["I23"].PutValue(200); | |
worksheet.Cells["I24"].PutValue(100); | |
// Dynamically load data on selection of Dropdown value | |
worksheet.Cells["D16"].Formula = "=IFERROR(VLOOKUP($C$16,$C$21:$I$24,2,FALSE),0)"; | |
worksheet.Cells["E16"].Formula = "=IFERROR(VLOOKUP($C$16,$C$21:$I$24,3,FALSE),0)"; | |
worksheet.Cells["F16"].Formula = "=IFERROR(VLOOKUP($C$16,$C$21:$I$24,4,FALSE),0)"; | |
worksheet.Cells["G16"].Formula = "=IFERROR(VLOOKUP($C$16,$C$21:$I$24,5,FALSE),0)"; | |
worksheet.Cells["H16"].Formula = "=IFERROR(VLOOKUP($C$16,$C$21:$I$24,6,FALSE),0)"; | |
worksheet.Cells["I16"].Formula = "=IFERROR(VLOOKUP($C$16,$C$21:$I$24,7,FALSE),0)"; | |
// Create Chart | |
int index = worksheet.Charts.Add(ChartType.Column, 0, 3, 12, 9); | |
Chart chart = worksheet.Charts[index]; | |
chart.NSeries.Add("='Sheet1'!$D$16:$I$16", false); | |
chart.NSeries[0].Name = "=C16"; | |
chart.NSeries.CategoryData = "=$D$15:$I$15"; | |
// Save result on disc | |
workbook.Save(dataDir + "output_out.xlsx"); |