Vorgänger und Abhängige
Einführung
- Vorgängerzellen sind Zellen, auf die in einer anderen Zelle eine Formel verweist. Wenn beispielsweise Zelle D10 die Formel =B5 enthält, dann ist die Zelle B5 ein Vorgänger von Zelle D10.
- Abhängige Zellen enthalten Formeln, die auf andere Zellen verweisen. Wenn beispielsweise die Zelle D10 die Formel =B5 enthält, ist die Zelle D10 von der Zelle B5 abhängig.
Um die Tabelle übersichtlicher zu gestalten, möchten Sie möglicherweise klar zeigen, welche Zellen in einer Tabelle in einer Formel verwendet werden. Ebenso möchten Sie die abhängigen Zellen anderer Zellen extrahieren.
Aspose.Cells ermöglicht es Ihnen, die Zellen zu verfolgen und herauszufinden, welche verknüpft sind.
Vorgänger- und Abhängige Zellen verfolgen: Microsoft Excel
Formeln können sich ändern, basierend auf Änderungen, die von einem Kunden vorgenommen wurden. Wenn beispielsweise die Zelle C1 von C3 und C4 abhängt, die eine Formel enthalten, und C1 geändert wird (d. h. die Formel überschrieben wird), müssen C3 und C4 oder andere Zellen entsprechend den Geschäftsregeln angepasst werden, um die Tabelle auszugleichen.
Ebenso angenommen, C1 enthält die Formel “=(B122)/(M2N32)”. Ich möchte die Zellen finden, von denen C1 abhängt, d. h. die vorhergehenden Zellen B1, M2 und N32.
Sie müssen möglicherweise die Abhängigkeit einer bestimmten Zelle zu anderen Zellen verfolgen. Wenn Geschäftsregeln in Formeln eingebettet sind, möchten wir die Abhängigkeit herausfinden und einige Regeln entsprechend ausführen. Ebenso, wenn der Wert einer bestimmten Zelle geändert wird, welche Zellen im Arbeitsblatt sind von dieser Änderung betroffen?
Microsoft Excel ermöglicht es Benutzern, Vorgänger und Abhängige zu verfolgen.
- Auf der Ansichts-Symbolleiste wählen Sie Formelüberwachung aus. Der Dialog zur Formelüberwachung wird angezeigt.
- Vorgänger verfolgen:
- Wählen Sie die Zelle aus, die die Formel enthält, für die Sie Vorgängerzellen finden möchten.
- Um an jede Zelle einen Tracer-Pfeil anzuzeigen, die direkt Daten an die aktive Zelle bereitstellt, klicken Sie auf Vorgänger verfolgen auf der Formelüberwachungs-Symbolleiste.
- Formeln verfolgen, die auf eine bestimmte Zelle verweisen (Abhängige)
- Wählen Sie die Zelle aus, für die Sie die abhängigen Zellen identifizieren möchten.
- Um an jede Zelle, die von der aktiven Zelle abhängig ist, einen Tracer-Pfeil anzuzeigen, klicken Sie auf Abhängige verfolgen auf der Formelüberwachungs-Symbolleiste.
Vorgänger- und Abhängige Zellen verfolgen: Aspose.Cells
Vorgänger verfolgen
Aspose.Cells erleichtert das Abrufen von Vorgängerzellen. Es kann nicht nur Zellen abrufen, die Daten zu einfachen Formelvorgängern bereitstellen, sondern auch Zellen finden, die Daten zu komplexen Formelvorgängern mit benannten Bereichen bereitstellen.
Im folgenden Beispiel wird eine Vorlagen-Excel-Datei, Book1.xls, verwendet. Das Arbeitsblatt enthält Daten und Formeln.
Aspose.Cells stellt die Cell -Klasse bereit, deren Methode GetPrecedents zur Nachverfolgung von Vorgängerzellen verwendet wird. Es gibt eine ReferredAreaCollection zurück. Wie oben zu sehen ist in Book1.xls, enthält die Zelle B7 eine Formel “=SUMME(A1:A3)”. Daher sind die Zellen A1:A3 die Vorgängerzellen der Zelle B7. Das folgende Beispiel demonstriert die Funktion zur Nachverfolgung von Vorgängern anhand der Vorlagendatei Book1.xls.
Workbook workbook = new Workbook(dataDir + "Book1.xlsx"); | |
Cells cells = workbook.getWorksheets().get(0).getCells(); | |
Cell cell = cells.get("B2"); | |
//Tracing precedents of the cell A12. | |
//The return array contains ranges and cells. | |
ReferredAreaCollection ret = cell.getPrecedents(); | |
//Printing all the precedent cells' name. | |
if(ret != null) | |
{ | |
for(int m = 0 ; m < ret.getCount(); m++) | |
{ | |
ReferredArea area = ret.get(m); | |
StringBuilder stringBuilder = new StringBuilder(); | |
if (area.isExternalLink()) | |
{ | |
stringBuilder.append("["); | |
stringBuilder.append(area.getExternalFileName()); | |
stringBuilder.append("]"); | |
} | |
stringBuilder.append(area.getSheetName()); | |
stringBuilder.append("!"); | |
stringBuilder.append(CellsHelper.cellIndexToName(area.getStartRow(), area.getStartColumn())); | |
if (area.isArea()) | |
{ | |
stringBuilder.append(":"); | |
stringBuilder.append(CellsHelper.cellIndexToName(area.getEndRow(), area.getEndColumn())); | |
} | |
System.out.println("Tracing Precedents: " + stringBuilder.toString()); | |
} | |
} |
Abhängige verfolgen
Aspose.Cells ermöglicht es Ihnen, abhängige Zellen in Tabellenkalkulationen zu erhalten. Aspose.Cells kann nicht nur Zellen abrufen, die Daten zu einer einfachen Formel bereitstellen, sondern auch Zellen finden, die Daten für komplexe Formeln mit benannten Bereichen bereitstellen.
Aspose.Cells bietet die Cell Klasse mit der Methode GetDependents, um Abhängigkeiten einer Zelle nachzuverfolgen. Zum Beispiel enthält Book1.xlsx Formeln: “=A1+20” und “=A1+30” in den Zellen B2 und C2. Das folgende Beispiel zeigt, wie man die Abhängigkeiten für die Zelle A1 mit der Vorlage Book1.xlsx nachverfolgt.
Workbook workbook = new Workbook(dataDir + "Book1.xlsx"); | |
Cells cells = workbook.getWorksheets().get(0).getCells(); | |
Cell c = cells.get("A1"); | |
//Get the all the dependents of A1 cell | |
Cell[] dependents = c.getDependents(true); | |
for (int i = 0; i< dependents.length; i++) | |
{ | |
Cell d = dependents[i]; | |
System.out.println("Tracing Dependents: " + d.getWorksheet().getName() + d.getName() + ":" + d.getFormula()); | |
} |
Nachverfolgung von Vorgänger- und abhängigen Zellen gemäß der Berechnungskette
Die oben genannten APIs zur Nachverfolgung von Vorgängern und Abhängigkeiten basieren auf dem Formelausdruck selbst. Sie bieten eine bequeme Möglichkeit, die Interdependenzen bei einigen Formeln zu verfolgen. Bei einer großen Anzahl von Formeln im Arbeitsbuch und Bedarf an der Nachverfolgung aller Vorgänger und Abhängigkeiten einzelner Zellen ist die Leistung jedoch schlecht. Für solche Situationen sollten Nutzer die Methoden GetPrecedentsInCalculation und GetDependentsInCalculation verwenden. Diese beiden Methoden verfolgen Abhängigkeiten gemäß der Berechnungskette. Zum Einsatz dieser Funktionen aktivieren Sie zuerst die Berechnungskette mit Workbook.Settings.FormulaSettings.EnableCalculationChain. Danach führen Sie eine vollständige Berechnung des Arbeitsbuchs durch mit Workbook.CalculateFormula(). Danach können Sie Vorgänger oder Abhängigkeiten aller Zellen nachverfolgen, die Sie benötigen.
Für einige Formeln können die resultierenden Vorgänger bei GetPrecedents und GetPrecedentsInCalculation unterschiedlich sein, und die resultierenden Abhängigen bei GetDependents und GetDependentsInCalculation können unterschiedlich sein. Wenn z.B. die Formel von Zelle A1 “=IF(TRUE,B2,C3)” ist, liefert GetPrecedents B2 und C3 als Vorgänger von A1. Demnach haben sowohl B2 als auch C3 die abhängige Zelle A1 bei der Überprüfung durch GetDependents. Für die Berechnung dieser Formel ist jedoch offensichtlich, dass nur B2 das berechnete Ergebnis beeinflussen kann. Daher gibt GetPrecedentsInCalculation A1 nicht für C3 zurück, und GetDependentsInCalculation gibt C3 nicht für A1 zurück. Manchmal hat der Benutzer möglicherweise nur die Anforderung, die interdependencies zu verfolgen, die tatsächlich das berechnete Ergebnis der Formeln basierend auf den aktuellen Daten der Arbeitsmappe beeinflussen, dann sollten sie auch GetDependentsInCalculation/GetPrecedentsInCalculation anstelle von GetDependents/GetPrecedents verwenden.
Das folgende Beispiel zeigt, wie Sie die Präzedenzfälle und Dependenzen gemäß der Berechnungskette für Zellen verfolgen können:
Workbook workbook = new Workbook(); | |
Cells cells = workbook.getWorksheets().get(0).getCells(); | |
cells.get("A1").setFormula("=B1+SUM(B1:B10)+[Book1.xls]Sheet1!B2"); | |
cells.get("A2").setFormula("=IF(TRUE,B2,B1)"); | |
workbook.getSettings().getFormulaSettings().setEnableCalculationChain(true); | |
workbook.calculateFormula(); | |
Iterator en = cells.get("B1").getDependentsInCalculation(false); | |
System.out.println("B1's calculation dependents:"); | |
while(en.hasNext()) | |
{ | |
Cell c = (Cell)en.next(); | |
System.out.println(c.getName()); | |
} | |
en = cells.get("B2").getDependentsInCalculation(false); | |
System.out.println("B2's calculation dependents:"); | |
while(en.hasNext()) | |
{ | |
Cell c = (Cell)en.next(); | |
System.out.println(c.getName()); | |
} | |
en = cells.get("A1").getPrecedentsInCalculation(); | |
System.out.println("A1's calculation precedents:"); | |
while(en.hasNext()) | |
{ | |
ReferredArea r = (ReferredArea)en.next(); | |
System.out.println(r); | |
} | |
en = cells.get("A2").getPrecedentsInCalculation(); | |
System.out.println("A2's calculation precedents:"); | |
while(en.hasNext()) | |
{ | |
ReferredArea r = (ReferredArea)en.next(); | |
System.out.println(r); | |
} |