Einfügen von YouTube-Suchergebnissen in Ihre Tabellenkalkulation mithilfe von Makros

22 November 2023By Vlad

Dieses Makro integriert YouTube-Suchergebnisse in den Tabellenkalkulationseditor von ONLYOFFICE. Durch die Einbettung der YouTube-Suchfunktionalität bietet es eine bequeme Lösung zur Anreicherung von Tabellenkalkulationen mit Multimedia-Inhalten. Schauen wir uns an, wie man das Makro erstellt.

A Macro that inserts Youtube Search Results in ONLYOFFICE Spreadhseet

Über die API

Für dieses Makro nutzen wir RapidAPI, um den Datenabruf zu erleichtern. Mithilfe der XMLHttpRequest-Funktion definieren wir die Ziel-URL und setzen die Header mithilfe der von RapidAPI bereitgestellten Codeschnipsel. Wir haben uns für die YouTube Search Results API-Referenz von Marin Delija entschieden. Sie ist eine ideale Wahl, da der Basisplan kostenlos ist und uns grünes Licht für 100 Anfragen pro Tag gibt. Außerdem gibt es kostenpflichtige Pläne, falls wir mehr Anfragen benötigen. Es ist eine praktische Wahl, die die Bedürfnisse und das Budget aller Beteiligten in Einklang bringt!

Wenn Sie bereits Teil der RapidAPI-Community sind, klicken Sie einfach auf den obigen Link und abonnieren Sie die API-Referenz. Für neue Benutzer ist der Anmeldeprozess einfach – geben Sie einfach Ihre E-Mail-Adresse an, und schon können Sie loslegen!

Erstellung eines Makros

  const data = null;
  const oWorksheet = Api.GetActiveSheet();
  let query = []; // empty query array to store the queries

Diese Zeilen rufen das aktive Blatt in der ONLYOFFICE-Tabellenkalkulation ab und weisen es der Variablen oWorksheet zu. Außerdem wird ein leeres Array query initialisiert, in dem die zu durchsuchenden Abfragen gespeichert werden.

// Takes the queries from the cells A1, A2, and A3.
  for (let i = 1; i < 4; i++) {
    const value = String(oWorksheet.GetRange("A" + i).GetValue());
    if (value !== null && value.length !== 0) {
      query.push(value);
    }
  }

Diese for-Schleife durchläuft die Zellen A1 bis A3, um die Werte zu erfassen. Wenn ein Wert vorhanden und nicht leer ist, wird er an das Array query angehängt.

  // polpulates the cells with the titles and links from the queries
  function populate(count, title, link) {
    let nRowTitle = 9;
    for (let j = 0; j < title.length; j++) {
      let passedTitleCount = count * 3;
      const text = JSON.stringify(title[j]);
      const textWithoutQuotes = text.replace(/"/g, "");
      oWorksheet.GetRangeByNumber(nRowTitle - 1, passedTitleCount).SetValue(query[count]);
      oWorksheet.GetRangeByNumber(nRowTitle - 1, passedTitleCount).SetAlignHorizontal("center");
      oWorksheet
        .GetRangeByNumber(nRowTitle + j, passedTitleCount)
        .SetValue(textWithoutQuotes);
      oWorksheet
        .GetRangeByNumber(nRowTitle + j, passedTitleCount)
        .AutoFit(false, true);
    }
    let nRowLink = 9;
    for (let h = 0; h < link.length; h++) {
      let passedLinkCount = count * 3 + 1;
      const text = JSON.stringify(link[h]);
      const textWithoutQuotes = text.replace(/"/g, "");
      oWorksheet
        .GetRangeByNumber(nRowLink + h, passedLinkCount)
        .SetValue(textWithoutQuotes);
      oWorksheet
        .GetRangeByNumber(nRowLink + h, passedLinkCount)
        .AutoFit(false, true);
    }
  }

Die Funktion populate mag auf den ersten Blick überwältigend erscheinen, aber sie ist nicht kompliziert. Die Funktion populate benötigt drei Parameter: count, title und link. Auf der Grundlage der Anzahl füllt sie die entsprechenden Zellen im Arbeitsblatt mit den Ergebnissen. Es gibt zwei for-Schleifen; eine hilft beim Auffüllen von titles, während die andere for-Schleife die Links neben titles auffüllt.

// refreshes the values in all the cells of the spreadsheet
  function reloadCellValues() {
    let reload = setTimeout(function () {
      Api.asc_calculate(Asc.c_oAscCalculateType.All);
    }, 5000);
  }

In diesem Teil definieren wir eine Funktion reloadCellValues, die setTimeout verwendet, um alle Zellwerte im Arbeitsblatt nach einer Verzögerung von 5 Sekunden zu aktualisieren.

for (let count = 0; count < query.length; count++) {
    const url = `https://youtube-search-results.p.rapidapi.com/youtube-search/?q=${query[count]}`;
    const xhr = new XMLHttpRequest();
    xhr.onload = function () {
      const apiData = JSON.parse(this.response);
      const { videos: results } = apiData;
      const title = results.map((i) => i.title);
      const link = results.map((i) => i.link);
      populate(count, title, link);
    };

Hier verwenden wir eine for-Schleife, um jede im Array query gespeicherte Abfrage zu durchlaufen und nachfolgende Anfragen an RapidAPI zu stellen. Wir definieren eine dynamische URL in der Variable url. Eine Konstante xhr wird mit dem XMLHttpRequest-Objekt initialisiert.

Mit xhr.onload definieren wir einen Event-Handler für den Fall, dass XMLHttpRequest seine Anfrage erfolgreich abgeschlossen hat.

Innerhalb der onload-Funktion rufen wir Daten ab und destrukturieren dann das Objekt, um die erforderlichen Werte zu extrahieren.

Dann verwenden wir die map-Methode, um alle Titel und Links durchzugehen und sie in zwei Arrays zu speichern. Diese Arrays werden dann zusammen mit der Zählung an die Funktion populate übergeben.

 // XMLHttpRequest Code Snippets copied from RapidAPI
    xhr.open("GET", url);
    xhr.setRequestHeader(
      "X-RapidAPI-Key",
      YourApiKey
    );
    xhr.setRequestHeader(
      "X-RapidAPI-Host",
      "youtube-search-results.p.rapidapi.com"
    );
    xhr.send(data);
  }

Als nächstes definieren wir die Ziel-URL für den XMLHttpRequest und konfigurieren die Header für die Anfrage. Dieses Codesegment ist aus den von RapidAPI bereitgestellten Codeschnipseln für eine XMLHttpRequest extrahiert. Sie müssen “YourApiKey” durch Ihren persönlichen API-Schlüssel ersetzen, den Sie in RapidAPI finden.

reloadCellValues();

Schließlich rufen wir die Methode reloadCellValues auf, die wir zuvor definiert haben.

Der vollständige Makrocode

Hier ist der gesamte Code des Makros.

(function () {
  const data = null;

  const oWorksheet = Api.GetActiveSheet();

  let query = []; // empty query array to store the queries

  // Takes the queries from the cells A1, A2, and A3.
  for (let i = 1; i < 4; i++) {
    const value = String(oWorksheet.GetRange("A" + i).GetValue());
    if (value !== null && value.length !== 0) {
      query.push(value);
    }
  }

  // polpulates the cells with the titles and links from the queries
  function populate(count, title, link) {
    let nRowTitle = 9;
    for (let j = 0; j < title.length; j++) {
      let passedTitleCount = count * 3;
      const text = JSON.stringify(title[j]);
      const textWithoutQuotes = text.replace(/"/g, "");
      oWorksheet
        .GetRangeByNumber(nRowTitle - 1, passedTitleCount)
        .SetValue(query[count]);
      oWorksheet
        .GetRangeByNumber(nRowTitle - 1, passedTitleCount)
        .SetAlignHorizontal("center");
      oWorksheet
        .GetRangeByNumber(nRowTitle + j, passedTitleCount)
        .SetValue(textWithoutQuotes);
      oWorksheet
        .GetRangeByNumber(nRowTitle + j, passedTitleCount)
        .AutoFit(false, true);
    }

    let nRowLink = 9;
    for (let h = 0; h < link.length; h++) {
      let passedLinkCount = count * 3 + 1;
      const text = JSON.stringify(link[h]);
      const textWithoutQuotes = text.replace(/"/g, "");
      oWorksheet
        .GetRangeByNumber(nRowLink + h, passedLinkCount)
        .SetValue(textWithoutQuotes);
      oWorksheet
        .GetRangeByNumber(nRowLink + h, passedLinkCount)
        .AutoFit(false, true);
    }
  }

  // refreshes the values in all the cells of the spreadsheet
  function reloadCellValues() {
    let reload = setTimeout(function () {
      Api.asc_calculate(Asc.c_oAscCalculateType.All);
    }, 5000);
  }

  // for loop for multiple queries
  for (let count = 0; count < query.length; count++) {
    const url = `https://youtube-search-results.p.rapidapi.com/youtube-search/?q=${query[count]}`;
    const xhr = new XMLHttpRequest();
    xhr.onload = function () {
      const apiData = JSON.parse(this.response);
      const { videos: results } = apiData;
      const title = results.map((i) => i.title);
      const link = results.map((i) => i.link);
      populate(count, title, link);
    };

    // XMLHttpRequest Code Snippets copied from RapidAPI
    xhr.open("GET", url);
    xhr.setRequestHeader("X-RapidAPI-Key", "YOUR API KEY GOES HERE");
    xhr.setRequestHeader(
      "X-RapidAPI-Host",
      "youtube-search-results.p.rapidapi.com"
    );
    xhr.send(data);
  }

  reloadCellValues();
})();

Schauen wir uns das Makro in Aktion an.

Wir hoffen, dass sich das Makro als nützlich erwiesen hat und die Daten der YouTube-Suchergebnisse nahtlos in Ihre Tabellenkalkulation integriert.

Verpassen Sie nicht die Chance, die Leistung der ONLYOFFICE API zu nutzen. Unsere umfangreiche Bibliothek von API-Methoden ist Ihr Schlüssel, um Ihre Ideen in die Realität umzusetzen. Wenn Sie Fragen oder innovative Konzepte haben, können Sie uns diese gerne mitteilen. Ihre Anregungen sind uns sehr wichtig, und wir freuen uns über die Möglichkeit der Zusammenarbeit mit Ihnen. Viel Erfolg!