Freigeben über


Synchrone benutzerdefinierte Funktionen

Synchrone benutzerdefinierte Funktionen ermöglichen die gleichzeitige Ausführung der Auswertungs- und bedingten Formatprozesse in Excel mit der benutzerdefinierten Funktion. Aktivieren Sie synchrone Unterstützung, wenn Ihre benutzerdefinierte Funktion zusammen mit einem der in diesem Artikel aufgeführten Excel-Prozesse ausgeführt werden muss. Benutzerdefinierte Funktionen, die synchrone Vorgänge nicht unterstützen, geben einen Fehler wie #CALC! oder #VALUE! zurück, wenn sie gleichzeitig mit diesen Excel-Prozessen ausgeführt werden.

Warnung

Synchrone benutzerdefinierte Funktionen unterstützen keine Schreibvorgänge mit Office-JavaScript-APIs, z. B. mit Range.values zum Festlegen eines Zellwerts. Das Aufrufen eines Schreibvorgangs in einer synchronen benutzerdefinierten Funktion kann dazu führen, dass Excel einfriert.

Excel-Prozesse, die von synchronen benutzerdefinierten Funktionen unterstützt werden

Die folgenden Aktionen und Prozesse funktionieren mit synchronen benutzerdefinierten Funktionen.

Unterstützte Auswertungsaktionen

  • Wählen Sie Formeln und dann Formeln auswerten in Excel aus.
  • Auswählen von Formeln und dann Funktion einfügen in Excel.
  • Wählen Sie im Zellbearbeitungsmodus einen Teil einer Formel aus, und verwenden Sie F9, um Teilberechnungsergebnisse anzuzeigen.
  • Die Application.Calculate -Methode in VBA.

Unterstützte Aktionen im bedingten Format

Die folgende Liste gilt für Aktionen zur bedingten Formatierung, die sowohl von der Excel-Benutzeroberfläche als auch von Office JavaScript-APIs ausgelöst werden.

  • Erstellen Sie eine neue Regel.
  • Regeln bearbeiten.
  • Regeln löschen.
  • Regeln neu anordnen.
  • Ändern Sie den Bereich "Gilt für".
  • Aktivieren oder deaktivieren Sie "Stop if true".
  • Löschen Sie alle Regeln.
  • Ausschneiden und Einfügen von Zellen, die bedingte Formatierung enthalten.
  • Kopieren und Einfügen von Zellen, die bedingte Formatierung enthalten.

Hinweis

Wenn die Ausführung einer synchronen benutzerdefinierten Funktion viel Zeit in Anspruch nimmt, kann Excel die Benutzeroberfläche vorübergehend blockieren, während auf das Ergebnis gewartet wird. Um längere Unterbrechungen zu vermeiden, können Benutzer die Ausführung der Funktion jederzeit abbrechen, indem sie die ESC-TASTE verwenden oder eine beliebige Stelle außerhalb der Zelle oder des Dialogfelds auswählen.

Aktivieren der synchronen Unterstützung in Ihrem Add-In

Führen Sie die folgenden Schritte aus, um synchrone Szenarien in Ihrem Add-In zu unterstützen.

  • Wenn Sie JSON-Metadaten automatisch generieren, verwenden Sie das @supportSync JSDoc-Tag.
  • Wenn Sie JSON-Metadaten manuell erstellen, verwenden Sie die "supportSync": true Einstellung im "options" -Objekt Ihrer functions.json-Datei .
  • Wenn die Funktion verwendet Excel.RequestContext, rufen Sie die setInvocation -Methode von auf Excel.RequestContext , und übergeben Sie das CustomFunctions.Invocation -Objekt. Ein Beispiel finden Sie im Codebeispiel.

Wichtig

Synchrone benutzerdefinierte Funktionen können keine Streaming- oder flüchtigen Funktionen sein. Wenn Sie das @supportSync Tag mit @volatile - oder @streaming -Tags verwenden, ignoriert Excel die synchrone Unterstützung. Die Unterstützung für Flüchtige oder Streaming hat Vorrang.

Codebeispiel

Im folgenden Codebeispiel wird das Erstellen einer synchronen benutzerdefinierten Funktion veranschaulicht.

/** 
 * A synchronous custom function that takes a cell address and returns the value of that cell.
 * @customfunction
 * @supportSync
 * @param {string} address The address of the cell from which to retrieve the value.
 * @param {CustomFunctions.Invocation} invocation Invocation object.
 * @returns The value of the cell at the input address.
 */ 
export async function getCellValue(address, invocation) {
  const context = new Excel.RequestContext();
  context.setInvocation(invocation); // The `invocation` object must be passed in the `setInvocation` method for synchronous functions.

  const range = context.workbook.worksheets.getActiveWorksheet().getRange(address);
  range.load("values");

  await context.sync(); 
  return range.values[0][0];
}

Siehe auch