So handhaben Sie asynchrone API-Aufrufe in benutzerdefinierten ONLYOFFICE-Funktionen

30 Juli 2025Von Ksenija

Benutzerdefinierte Funktionen sind eine leistungsstarke und flexible Möglichkeit, die Funktionalität des ONLYOFFICE-Tabelleneditors zu erweitern. Im Rahmen unserer kontinuierlichen Bemühungen, die Plattform zu verbessern, bietet die aktuelle Version von ONLYOFFICE Docs Unterstützung für asynchrone API-Aufrufe innerhalb benutzerdefinierter Funktionen. In diesem Blogbeitrag zeigen wir Ihnen, wie Sie diese in Ihre eigenen Lösungen integrieren können.

How to handle async API calls inside ONLYOFFICE custom functions

Über benutzerdefinierte ONLYOFFICE-Funktionen

Benutzerdefinierte Funktionen sind eine vielseitige und leistungsstarke Ergänzung zu ONLYOFFICE-Makros im Tabellenkalkulationseditor. Sie ermöglichen Ihnen die Erstellung eigener Funktionen, die exportiert und direkt in der Tabelle verwendet werden können.

(function () {
    /**
      * This is a custom function that can be used in the editor.
      * @customfunction

      * @param {number} value - description of the parameter.
      * @returns {number} Description of the returned data.
      */
    function customFunctionName(value) {
        // Add your custom calculation logic here
        return // your calculation result;
    }
    // Register the custom function with the editor
    Api.AddCustomFunction(customFunctionName);
})();

Wo zu finden: Ansicht > Makros > Benutzerdefinierte Funktionen

Was sich geändert hat

Mit der Veröffentlichung von ONLYOFFICE Docs 9.0 haben wir die Möglichkeit eingeführt, asynchrone Funktionen in Ihren benutzerdefinierten Skripten aufzurufen.

Jetzt können Sie:

  • Asynchrone Webanfragen an beliebige Dienste stellen.
  • Asynchrone Anfragen an KI-Anbieter stellen.
  • Asynchronen JS-Code in asynchronen Funktionen verwenden.
  • Asynchrone Antworten verarbeiten.
  • Ergebnisse direkt in Ihre Tabelle exportieren.
  (function () {
    // Make an asynchronous request
    let asyncFunc = async function (value) {
      let request = await fetch("https://yourURL");
      const jsonData = await request.json();
      if (value === undefined) {
        value = 2;
      }
      return jsonData;
    };
    /**
     * This is a custom function that can be used in the editor.
     * @customfunction

     * @param {number} value - description of the parameter.
     * @returns {number} Description of the returned data.
     */
    async function customFunctionName(value) {
      // Call the asynchronous function and return its result
      return await asyncFunc(value);
    }
    // Register the custom function with the editor
    Api.AddCustomFunction(customFunctionName);
  })();

Asynchrone API-Aufrufe in benutzerdefinierten Funktionen verwenden

Für dieses Beispiel verwenden wir die Umsatzsteuer-API von API Ninjas. Sie gibt den Umsatzsteuersatz für alle in der Anfrage angegebenen US-Postleitzahlen zurück.

Hinweis: Um diese benutzerdefinierte ONLYOFFICE-Funktion zu verwenden, benötigen Sie Ihren eigenen API-Schlüssel, den Sie auf der API Ninjas-Website erhalten.

Erstellen des Makros

Zuerst definieren wir die asynchrone Funktion getSalesTax:

let getSalesTax = async function (value) {
}

Sie benötigt als Wertparameter eine US-Postleitzahl.

Wenn keine Postleitzahl angegeben ist, wird standardmäßig 90210 verwendet:

let getSalesTax = async function (value) {
}
 if (undefined === value) {
      value = 90210;
    }

Da einige US-Postleitzahlen mit 0 beginnen, stellen wir sicher, dass die Postleitzahl eine fünfstellige Zeichenfolge ist:

 // Convert to string and add missing zeros if needed
    let zipStr = value.toString();
    while (zipStr.length < 5) {
      zipStr = '0' + zipStr;
    }

Beispiel: Aus 31 wird 00031.

Anschließend erstellen wir die Anfrage-URL für die API, indem wir die Postleitzahl als Abfrageparameter anhängen:

Und senden eine GET-Anfrage an die API:

 let request = await fetch(url, {
      method: 'GET',
      headers: {
        'X-Api-Key': 'yourAPIkey',
        'Content-Type': 'application/json'
      }
    });

Anschließend parsen wir die JSON-Antwort in ein verwendbares JavaScript-Objekt:

  let jsonData = await request.json();

Wir extrahieren das Feld state_rate aus dem ersten Element des zurückgegebenen Arrays. Es gibt den staatlichen Umsatzsteuersatz für die angegebene Postleitzahl an. Und wir geben diese Zahl zurück:

 const taxRate = jsonData[0].state_rate;
    return taxRate;

Dann definieren wir die Parameter der benutzerdefinierten Funktion:

 /**
   * Function that returns state sales tax.
   * @customfunction

   * @param {number} value - zip code.
   * @returns {number} Returns state sales tax data.
   */

Wir erhalten die Antwort der asynchronen Funktion:

 async function salestax(value) {
    return await getSalesTax(value);
  }

Und wir registrieren die benutzerdefinierte Funktion:

  // Add the custom function 
  Api.AddCustomFunction(salestax);
})();

Jetzt können wir die Funktion SALESTAX() direkt in einer Tabelle aufrufen.

Der gesamte Code lautet wie folgt:

(function () {
  // Function that returns sales tax data from api-ninjas.com
  let getSalesTax = async function (value) {


    if (undefined === value) {
      value = 90210;
    }


    // Convert to string and add missing zeros if needed
    let zipStr = value.toString();
    while (zipStr.length < 5) {
      zipStr = '0' + zipStr;
    }


    const url = 'https://api.api-ninjas.com/v1/salestax?zip_code=' + zipStr;


    let request = await fetch(url, {
      method: 'GET',
      headers: {
        'X-Api-Key': 'yourAPIkey',
        'Content-Type': 'application/json'
      }
    });


    let jsonData = await request.json();
    const taxRate = jsonData[0].state_rate;
    return taxRate;
  };


  /**
   * Function that returns state sales tax.
   * @customfunction

   * @param {number} value - zip code.
   * @returns {number} Returns state sales tax data.
   */
  async function salestax(value) {
    return await getSalesTax(value);
  }


  // Add the custom function 
  Api.AddCustomFunction(salestax);
})();

Speichern wir nun diese benutzerdefinierte Funktion und sehen, wie sie funktioniert!

Wir hoffen, dass diese neue Funktion Ihnen hilft, noch robustere und vielseitigere Lösungen für Ihre Aufgaben zu entwickeln. Bei ONLYOFFICE entwickeln und liefern wir Technologien, die auf Ihre spezifischen Bedürfnisse zugeschnitten sind.

Wir ermutigen Sie, mit asynchronen benutzerdefinierten Funktionen zu experimentieren und diese erweiterte Funktionalität voll auszunutzen. Wenn Sie interessante Ideen oder Vorschläge haben, freuen wir uns über Ihre Nachricht! Wir sind immer offen für Feedback und Zusammenarbeit. Viel Erfolg bei Ihren Erkundungstouren!

Erstellen Sie Ihr kostenloses ONLYOFFICE-Konto

Öffnen und bearbeiten Sie gemeinsam Dokumente, Tabellen, Folien, Formulare und PDF-Dateien online.