Abrufen von Präzedenzfällen und abhängigen Formeln mithilfe der Excel-JavaScript-API

Excel-Formeln enthalten häufig Verweise auf andere Zellen im selben Arbeitsblatt oder derselben Arbeitsmappe. Diese zellübergreifenden Bezüge werden als "Präzedenzfälle" und "Abhängige" bezeichnet. Ein Präzedenzfall ist eine Zelle, die Daten für eine Formel bereitstellt. Ein abhängiger ist eine Zelle, die eine Formel enthält, die auf andere Zellen verweist. Weitere Informationen zu Features in der Excel-Benutzeroberfläche im Zusammenhang mit Präzedenzfällen und Abhängigen, z. B . Ablaufverfolgungsvorfolgen und Abhängigen Ablaufverfolgungen, finden Sie unter Anzeigen der Beziehungen zwischen Formeln und Zellen.

Eine Präzedenzzelle kann über eigene Präzedenzzellen verfügen. Jede Präzedenzzelle in dieser Präzedenzfallkette ist noch ein Präzedenzfall der ursprünglichen Zelle. Die gleiche Beziehung besteht für abhängige Elemente. Jede Zelle, die von einer anderen Zelle betroffen ist, ist von dieser Zelle abhängig. Ein "direkter Präzedenzfall" ist die erste vorangehende Gruppe von Zellen in dieser Sequenz, ähnlich dem Konzept der übergeordneten Elemente in einer Beziehung zwischen übergeordneten und untergeordneten Elementen. Ein "direkt abhängiger" ist die erste abhängige Gruppe von Zellen in einer Sequenz, ähnlich wie untergeordnete Elemente in einer Beziehung zwischen übergeordneten und untergeordneten Elementen.

Dieser Artikel enthält Codebeispiele, die die Präzedenzfälle und Abhängigkeiten von Formeln mithilfe der Excel-JavaScript-API abrufen. Eine vollständige Liste der Eigenschaften und Methoden, die das Range Objekt unterstützt, finden Sie unter Range Object (JavaScript-API für Excel).

Abrufen der Präzedenzfälle einer Formel

Suchen Sie die Präzedenzzellen einer Formel mit Range.getPrecedents. Range.getPrecedents gibt ein WorkbookRangeAreas -Objekt zurück. Dieses Objekt enthält die Adressen aller Präzedenzfälle in der Arbeitsmappe. Sie verfügt über ein separates RangeAreas Objekt für jedes Arbeitsblatt, das mindestens einen Formelvorrang enthält. Weitere Informationen zum RangeAreas -Objekt finden Sie unter Gleichzeitiges Arbeiten mit mehreren Bereichen in Excel-Add-Ins.

Um nur die direkten Präzedenzzellen einer Formel zu suchen, verwenden Sie Range.getDirectPrecedents. Range.getDirectPrecedents funktioniert wie Range.getPrecedents und gibt ein WorkbookRangeAreas -Objekt zurück, das die Adressen direkter Präzedenzfälle enthält.

Der folgende Screenshot zeigt das Ergebnis der Auswahl der Schaltfläche Präzedenzfälle der Ablaufverfolgung auf der Excel-Benutzeroberfläche. Mit dieser Schaltfläche wird ein Pfeil von vorgängern Zellen zur ausgewählten Zelle gezogen. Die ausgewählte Zelle E3 enthält die Formel "=C3 * D3", sodass sowohl C3 als auch D3 Präzedenzzellen sind. Im Gegensatz zur Excel-Ui-Schaltfläche zeichnen die getPrecedents Methoden und getDirectPrecedents keine Pfeile.

Pfeilverfolgungszellen auf der Excel-Benutzeroberfläche.

Wichtig

Die getPrecedents Methoden und getDirectPrecedents rufen keine präzedenzierenden Zellen in Arbeitsmappen ab.

Im folgenden Codebeispiel wird gezeigt, wie Sie mit den Range.getPrecedents Methoden und Range.getDirectPrecedents arbeiten. Das Beispiel ruft die Präzedenzfälle für den aktiven Bereich ab und ändert dann die Hintergrundfarbe dieser Vorgängerzellen. Die Hintergrundfarbe der direkten Präzedenzzellen wird auf Gelb und die Hintergrundfarbe der anderen Präzedenzzellen auf Orange festgelegt.

// This code sample shows how to find and highlight the precedents 
// and direct precedents of the currently selected cell.
await Excel.run(async (context) => {
  let range = context.workbook.getActiveCell();
  // Precedents are all cells that provide data to the selected formula.
  let precedents = range.getPrecedents();
  // Direct precedents are the parent cells, or the first preceding group of cells that provide data to the selected formula.    
  let directPrecedents = range.getDirectPrecedents();

  range.load("address");
  precedents.areas.load("address");
  directPrecedents.areas.load("address");
  
  await context.sync();

  console.log(`All precedent cells of ${range.address}:`);
  
  // Use the precedents API to loop through all precedents of the active cell.
  for (let i = 0; i < precedents.areas.items.length; i++) {
    // Highlight and print out the address of all precedent cells.
    precedents.areas.items[i].format.fill.color = "Orange";
    console.log(`  ${precedents.areas.items[i].address}`);
  }

  console.log(`Direct precedent cells of ${range.address}:`);

  // Use the direct precedents API to loop through direct precedents of the active cell.
  for (let i = 0; i < directPrecedents.areas.items.length; i++) {
    // Highlight and print out the address of each direct precedent cell.
    directPrecedents.areas.items[i].format.fill.color = "Yellow";
    console.log(`  ${directPrecedents.areas.items[i].address}`);
  }
});

Abrufen der Abhängigen einer Formel

Suchen Sie die abhängigen Zellen einer Formel mit Range.getDependents. Wie Range.getPrecedentsgibt Range.getDependents auch ein -Objekt zurück WorkbookRangeAreas . Dieses Objekt enthält die Adressen aller abhängigen Elemente in der Arbeitsmappe. Es verfügt über ein separates RangeAreas -Objekt für jedes Arbeitsblatt, das mindestens eine formelabhängige Enthält. Weitere Informationen zum Arbeiten mit dem RangeAreas -Objekt finden Sie unter Gleichzeitiges Arbeiten mit mehreren Bereichen in Excel-Add-Ins.

Um nur die direkten abhängigen Zellen einer Formel zu suchen, verwenden Sie Range.getDirectDependents. Range.getDirectDependents funktioniert wie Range.getDependents und gibt ein WorkbookRangeAreas -Objekt zurück, das die Adressen direkter abhängiger Elemente enthält.

Der folgende Screenshot zeigt das Ergebnis der Auswahl der Schaltfläche "Abhängige Ablaufverfolgung" auf der Excel-Benutzeroberfläche. Diese Schaltfläche zeichnet einen Pfeil aus der ausgewählten Zelle zu abhängigen Zellen. Die ausgewählte Zelle D3 verfügt über Zelle E3 als abhängige Zelle. E3 enthält die Formel "=C3 * D3". Im Gegensatz zur Excel-Ui-Schaltfläche zeichnen die getDependents Methoden und getDirectDependents keine Pfeile.

Abhängige Zellen mit Pfeilverfolgung auf der Excel-Benutzeroberfläche.

Wichtig

Die getDependents Methoden und getDirectDependents rufen keine abhängigen Zellen über Arbeitsmappen hinweg ab.

Im folgenden Codebeispiel wird gezeigt, wie Sie mit den Range.getDependents Methoden und Range.getDirectDependents arbeiten. Das Beispiel ruft die abhängigen Elemente für den aktiven Bereich ab und ändert dann die Hintergrundfarbe dieser abhängigen Zellen. Die Hintergrundfarbe der direkten abhängigen Zellen wird auf Gelb und die Hintergrundfarbe der anderen abhängigen Zellen auf Orange festgelegt.

// This code sample shows how to find and highlight the dependents 
// and direct dependents of the currently selected cell.
await Excel.run(async (context) => {
    let range = context.workbook.getActiveCell();
    // Dependents are all cells that contain formulas that refer to other cells.
    let dependents = range.getDependents();  
    // Direct dependents are the child cells, or the first succeeding group of cells in a sequence of cells that refer to other cells.
    let directDependents = range.getDirectDependents();

    range.load("address");
    dependents.areas.load("address");    
    directDependents.areas.load("address");
    
    await context.sync();

    console.log(`All dependent cells of ${range.address}:`);
    
    // Use the dependents API to loop through all dependents of the active cell.
    for (let i = 0; i < dependents.areas.items.length; i++) {
      // Highlight and print out the addresses of all dependent cells.
      dependents.areas.items[i].format.fill.color = "Orange";
      console.log(`  ${dependents.areas.items[i].address}`);
    }

    console.log(`Direct dependent cells of ${range.address}:`);

    // Use the direct dependents API to loop through direct dependents of the active cell.
    for (let i = 0; i < directDependents.areas.items.length; i++) {
      // Highlight and print the address of each dependent cell.
      directDependents.areas.items[i].format.fill.color = "Yellow";
      console.log(`  ${directDependents.areas.items[i].address}`);
    }
});

Siehe auch