Verwenden Sie ONLYOFFICE-Makros, um TextForms einfach zu Master-Formularvorlagen hinzuzufügen

16 Januar 2024By Vlad

Bei der Arbeit mit Formularvorlagendokumenten verwenden wir oft Dummy-Platzhalter, die wir später durch Formularelemente ersetzen. In diesem Blogbeitrag werden wir diesen Prozess automatisieren, indem wir ein Makro für den Dokumenteditor verwenden, das bei jedem Vorkommen eines bestimmten Wortes ein TextForm einfügt.

Use ONLYOFFICE macros to easily add TextForms to master form templates

Erstellung eines Makros

  const oDocument = Api.GetDocument();
  const numberOfElements = oDocument.GetElementsCount();

Hier wird das aktuelle Dokument in der Variablen oDocument gespeichert. Dann wird die Gesamtzahl der Elemente im Dokument mit der Methode GetElementsCount() abgefragt.

for (let elementIndex = 0; elementIndex < numberOfElements; elementIndex++)

In diesem Abschnitt wird eine for-Schleife verwendet, die jedes Element durchläuft. Auf diese Weise stellen wir sicher, dass wir in jedem Element (Absatz) das TextForm für das angegebene Wort einfügen.

    const oElement = oDocument.GetElement(elementIndex);
    const rawText = oElement.GetText();

Innerhalb der for-Schleife wird jedes Dokumentenelement mit Hilfe der Methode GetElement() mit dem elementIndex erfasst. Anschließend extrahieren wir den nicht-formatierten Text und speichern ihn in der Variablen rawText.

 const targetWord = "sample";
    let count = 0;
    for (let i = 0; i < targetWord.length; i++) {
      count++;
    }
    const wordLength = count - 1;

Hier definieren wir das Zielwort für unseren Kommentar. Anschließend ermitteln wir die Länge des Wortes mit einer for-Schleife und speichern sie in der Variablen wordLength.

   const wordRegex = new RegExp("\\b" + targetWord + "\\b", "gi");

Dann wird ein regulärer Ausdruck (wordRegex) erstellt, der das Zielwort verwendet, um alle Vorkommen im Dokument zu finden.

    let match;
    while ((match = wordRegex.exec(rawText)) !== null) {
      let matchPosition = match.index; 
      let nextMatchPosition = matchPosition + wordLength;

Hier wird in einer while-Schleife durch alle gefundenen und in wordRegex gespeicherten Instanzen iteriert.

Für jede Übereinstimmung werden die Startposition des Wortes (matchPosition) und die Position des nächsten Zeichens nach dem Wort (nextMatchPosition) berechnet.

const insertRange = oElement.GetRange(matchPosition, nextMatchPosition);
insertRange.Select();

Anschließend speichern wir den zu bearbeitenden Bereich in insertRange. Dann wählen wir den Bereich mit der Methode Select() aus.

oDocument.InsertTextForm({
        key: "Personal information",
        tip: "Enter your first name",
        required: true,
        placeholder: "Name",
        comb: true,
        cellWidth: 3,
        multiLine: false,
        autoFit: false,
        placeholderFromSelection: true,
        keepSelectedTextInForm: false,
      });

Schließlich fügen wir ein TextForm in den ausgewählten Bereich ein. Die Methode InsertTextForm() hat verschiedene Parameter. Sie können diese je nach Bedarf ändern.

Finale Version des Codes

Hier ist der Code für das gesamte Makro.

(function () {
    function addTextForm() {
      const oDocument = Api.GetDocument();
      const numberOfElements = oDocument.GetElementsCount();
  
      //looping through all the elements in the document.
      for (
        let elementIndex = 0;
        elementIndex < numberOfElements;
        elementIndex++
      ) {
        const oElement = oDocument.GetElement(elementIndex);
        const rawText = oElement.GetText();
  
        // Specify the target word and the length of the word
        const targetWord = "sample";
        let count = 0;
        for (let i = 0; i < targetWord.length; i++) {
          count++;
        }
        const wordLength = count - 1;
  
        // Find all occurrences of the target word in the document
        const wordRegex = new RegExp("\\b" + targetWord + "\\b", "gi");
        let match;
        while ((match = wordRegex.exec(rawText)) !== null) {
          let matchPosition = match.index; // returns the index where the word starts.
          let nextMatchPosition = matchPosition + wordLength; //the index where the word ends.
          console.log(matchPosition);
          console.log(nextMatchPosition);
          const insertRange = oElement.GetRange(matchPosition, nextMatchPosition);
          insertRange.Select();
          //insert a text form at the selected range
          oDocument.InsertTextForm({
            key: "Personal information",
            tip: "Enter your first name",
            required: true,
            placeholder: "Name",
            comb: true,
            cellWidth: 3,
            multiLine: false,
            autoFit: false,
            placeholderFromSelection: true,
            keepSelectedTextInForm: false,
          });
        }
      }
    }
  
    addTextForm();
  })();

Nun wollen wir sehen, wie unser Makro funktioniert.

Wir sind davon überzeugt, dass die Integration dieses Makros in Ihren oForm-Workflow Ihre Erfahrungen mit Formularvorlagen und oForms verbessern wird.

Verpassen Sie nicht die Chance, die Leistungsfähigkeit der ONLYOFFICE API zu nutzen. Unsere umfangreiche Bibliothek von API-Methoden ist der Schlüssel zur Verwirklichung Ihrer Ideen. Wenn Sie Fragen oder innovative Konzepte haben, können Sie uns diese gerne mitteilen. Wir schätzen Ihren Beitrag und freuen uns über die Möglichkeit, mit Ihnen zusammenzuarbeiten. Viel Erfolg!