Erstellen Sie dynamische Diagramme

Verwenden von Excel-Tabellen

ListObjects bietet die eingebaute Funktionalität zum Sortieren und Filtern der Daten bei Benutzerinteraktion. Sowohl Sortier- als auch Filteroptionen werden über die Dropdown-Listen bereitgestellt, die automatisch zur Kopfzeile des Listenobjekts hinzugefügt werden. Aufgrund dieser Funktionen (Sortieren und Filtern) scheint das ListObject der perfekte Kandidat zu sein, um als Datenquelle für ein dynamisches Diagramm zu dienen, da beim Ändern des Sortierens oder Filterns die Darstellung der Daten im Diagramm geändert wird, um die aktuelle wiederzugeben Zustand des Listenobjekts.

Um die Demonstration einfach verständlich zu halten, erstellen wir die Arbeitsmappe von Grund auf neu und gehen Schritt für Schritt vor, wie unten beschrieben.

  1. Erstellen Sie eine leere Arbeitsmappe.
  2. Greifen Sie auf Cells des ersten Arbeitsblatts in der Arbeitsmappe zu.
  3. Fügen Sie einige Daten in die Zellen ein.
  4. ListObject basierend auf den eingefügten Daten erstellen.
  5. Erstellen Sie ein Diagramm basierend auf dem Datenbereich von ListObject.
  6. Ergebnis auf Diskette speichern.
// For complete examples and data files, please go to https://github.com/aspose-cells/Aspose.Cells-for-Java
// The path to the documents directory.
String dataDir = Utils.getDataDir(UsingExcelTables.class);
// Create an instance of Workbook
Workbook book = new Workbook();
// Access first worksheet from the collection
Worksheet sheet = book.getWorksheets().get(0);
// Access cells collection of the first worksheet
Cells cells = sheet.getCells();
// Insert data column wise
cells.get("A1").putValue("Category");
cells.get("A2").putValue("Fruit");
cells.get("A3").putValue("Fruit");
cells.get("A4").putValue("Fruit");
cells.get("A5").putValue("Fruit");
cells.get("A6").putValue("Vegetables");
cells.get("A7").putValue("Vegetables");
cells.get("A8").putValue("Vegetables");
cells.get("A9").putValue("Vegetables");
cells.get("A10").putValue("Beverages");
cells.get("A11").putValue("Beverages");
cells.get("A12").putValue("Beverages");
cells.get("B1").putValue("Food");
cells.get("B2").putValue("Apple");
cells.get("B3").putValue("Banana");
cells.get("B4").putValue("Apricot");
cells.get("B5").putValue("Grapes");
cells.get("B6").putValue("Carrot");
cells.get("B7").putValue("Onion");
cells.get("B8").putValue("Cabage");
cells.get("B9").putValue("Potatoe");
cells.get("B10").putValue("Coke");
cells.get("B11").putValue("Coladas");
cells.get("B12").putValue("Fizz");
cells.get("C1").putValue("Cost");
cells.get("C2").putValue(2.2);
cells.get("C3").putValue(3.1);
cells.get("C4").putValue(4.1);
cells.get("C5").putValue(5.1);
cells.get("C6").putValue(4.4);
cells.get("C7").putValue(5.4);
cells.get("C8").putValue(6.5);
cells.get("C9").putValue(5.3);
cells.get("C10").putValue(3.2);
cells.get("C11").putValue(3.6);
cells.get("C12").putValue(5.2);
cells.get("D1").putValue("Profit");
cells.get("D2").putValue(0.1);
cells.get("D3").putValue(0.4);
cells.get("D4").putValue(0.5);
cells.get("D5").putValue(0.6);
cells.get("D6").putValue(0.7);
cells.get("D7").putValue(1.3);
cells.get("D8").putValue(0.8);
cells.get("D9").putValue(1.3);
cells.get("D10").putValue(2.2);
cells.get("D11").putValue(2.4);
cells.get("D12").putValue(3.3);
// Create ListObject. Get the List objects collection in the first worksheet
ListObjectCollection listObjects = sheet.getListObjects();
// Add a List based on the data source range with headers on
int index = listObjects.add(0, 0, 11, 3, true);
sheet.autoFitColumns();
// Create chart based on ListObject
index = sheet.getCharts().add(ChartType.COLUMN, 21, 1, 35, 18);
Chart chart = sheet.getCharts().get(index);
chart.setChartDataRange("A1:D12", true);
chart.getNSeries().setCategoryData("A2:B12");
// Calculate chart
chart.calculate();
// Save spreadsheet
book.save(dataDir + "output.xlsx");

Dynamische Formeln verwenden

Falls Sie die ListObjects nicht als Datenquelle für das dynamische Diagramm verwenden möchten, besteht die andere Möglichkeit darin, Excel-Funktionen (oder Formeln) zu verwenden, um einen dynamischen Datenbereich zu erstellen, und ein Steuerelement (z. B. ComboBox), um die Änderung auszulösen bei Daten. In diesem Szenario verwenden wir die VLOOKUP-Funktion, um die entsprechenden Werte basierend auf der Auswahl von ComboBox abzurufen. Wenn die Auswahl geändert wird, aktualisiert die VLOOKUP-Funktion den Zellenwert. Wenn ein Zellbereich die VLOOKUP-Funktion verwendet, kann der gesamte Bereich bei Benutzerinteraktion aktualisiert werden und kann daher als Quelle für das dynamische Diagramm verwendet werden.

Um die Demonstration einfach verständlich zu halten, erstellen wir die Arbeitsmappe von Grund auf neu und gehen Schritt für Schritt vor, wie unten beschrieben.

  1. Erstellen Sie eine leere Arbeitsmappe.
  2. Greifen Sie auf Cells des ersten Arbeitsblatts in der Arbeitsmappe zu.
  3. Fügen Sie einige Daten in die Zellen ein, indem Sie einen benannten Bereich erstellen. Diese Daten dienen als Reihen für das dynamische Diagramm.
  4. Erstellen Sie ComboBox basierend auf dem im vorherigen Schritt erstellten benannten Bereich.
  5. Fügen Sie weitere Daten in die Zellen ein, die als Quelle für die SVERWEIS-Funktion dienen.
  6. Fügen Sie die VLOOKUP-Funktion (mit entsprechenden Parametern) in einen Bereich von Zellen ein. Dieser Bereich dient als Quelle für das dynamische Diagramm.
  7. Erstellen Sie ein Diagramm basierend auf dem im vorherigen Schritt erstellten Bereich.
  8. Ergebnis auf Diskette speichern.
// For complete examples and data files, please go to https://github.com/aspose-cells/Aspose.Cells-for-Java
// The path to the documents directory.
String dataDir = Utils.getDataDir(UsingDynamicFormulas.class);
// Create a workbook object
Workbook workbook = new Workbook();
// Get the first worksheet
Worksheet sheet = workbook.getWorksheets().get(0);
// Access cells collection of first worksheet
Cells cells = sheet.getCells();
// Create a range in the second worksheet
Range range = cells.createRange("C21", "C24");
// Name the range
range.setName("MyRange");
// Fill different cells with data in the range
range.get(0, 0).putValue("North");
range.get(1, 0).putValue("South");
range.get(2, 0).putValue("East");
range.get(3, 0).putValue("West");
ComboBox comboBox = (ComboBox) sheet.getShapes().addShape(MsoDrawingType.COMBO_BOX, 15, 0, 2, 0, 17, 64);
comboBox.setInputRange("=MyRange");
comboBox.setLinkedCell("=B16");
comboBox.setSelectedIndex(0);
Cell cell = cells.get("B16");
Style style = cell.getStyle();
style.getFont().setColor(Color.getWhite());
cell.setStyle(style);
cells.get("C16").setFormula("=INDEX(Sheet1!$C$21:$C$24,$B$16,1)");
// Put some data for chart source
// Data Headers
cells.get("D15").putValue("Jan");
cells.get("D20").putValue("Jan");
cells.get("E15").putValue("Feb");
cells.get("E20").putValue("Feb");
cells.get("F15").putValue("Mar");
cells.get("F20").putValue("Mar");
cells.get("G15").putValue("Apr");
cells.get("G20").putValue("Apr");
cells.get("H15").putValue("May");
cells.get("H20").putValue("May");
cells.get("I15").putValue("Jun");
cells.get("I20").putValue("Jun");
// Data
cells.get("D21").putValue(304);
cells.get("D22").putValue(402);
cells.get("D23").putValue(321);
cells.get("D24").putValue(123);
cells.get("E21").putValue(300);
cells.get("E22").putValue(500);
cells.get("E23").putValue(219);
cells.get("E24").putValue(422);
cells.get("F21").putValue(222);
cells.get("F22").putValue(331);
cells.get("F23").putValue(112);
cells.get("F24").putValue(350);
cells.get("G21").putValue(100);
cells.get("G22").putValue(200);
cells.get("G23").putValue(300);
cells.get("G24").putValue(400);
cells.get("H21").putValue(200);
cells.get("H22").putValue(300);
cells.get("H23").putValue(400);
cells.get("H24").putValue(500);
cells.get("I21").putValue(400);
cells.get("I22").putValue(200);
cells.get("I23").putValue(200);
cells.get("I24").putValue(100);
// Dynamically load data on selection of Dropdown value
cells.get("D16").setFormula("=IFERROR(VLOOKUP($C$16,$C$21:$I$24,2,FALSE),0)");
cells.get("E16").setFormula("=IFERROR(VLOOKUP($C$16,$C$21:$I$24,3,FALSE),0)");
cells.get("F16").setFormula("=IFERROR(VLOOKUP($C$16,$C$21:$I$24,4,FALSE),0)");
cells.get("G16").setFormula("=IFERROR(VLOOKUP($C$16,$C$21:$I$24,5,FALSE),0)");
cells.get("H16").setFormula("=IFERROR(VLOOKUP($C$16,$C$21:$I$24,6,FALSE),0)");
cells.get("I16").setFormula("=IFERROR(VLOOKUP($C$16,$C$21:$I$24,7,FALSE),0)");
// Create Chart
int index = sheet.getCharts().add(ChartType.COLUMN, 0, 3, 12, 9);
Chart chart = sheet.getCharts().get(index);
chart.getNSeries().add("='Sheet1'!$D$16:$I$16", false);
chart.getNSeries().get(0).setName("=C16");
chart.getNSeries().setCategoryData("=$D$15:$I$15");
// Save result on disc
workbook.save(dataDir + "output.xlsx");