ONLYOFFICE-Makro zum Ersetzen von Formen durch Diagramme

23 November 2022By Vlad

Präsentationen sind ein wesentlicher Bestandteil unseres Lebens geworden. Sei es ein geschäftliches Treffen oder ein Schulprojekt, wir brauchen sie, um unsere Idee dem Publikum zu präsentieren. Die Anpassung Ihrer Präsentation mit 100 Folien kann eine etwas mühsame Aufgabe sein. Dieser Blogbeitrag zeigt Ihnen, wie Sie dies mit ONLYOFFICE macro bewältigen können.

Use ONLYOFFICE macro to replace shapes with charts

Unser kleines Makro wird auf jeder Folie Formen durch Diagramme ersetzen. Bevor wir fortfahren, sollten wir uns mit der Positionierung der Elemente befassen. Anders als bei Tabellenkalkulationen, wo Zeilen und Spalten über einen Index erreicht werden können, können wir ein Präsentationselement nur über seine Position auf der Folie ansteuern. Die Elemente sind übereinander angeordnet. Und das bedeutet, dass wir sie finden können, indem wir alle Elemente in ein Array schieben und es durchlaufen.

Erstellung eines Makros

Also zielen wir zunächst auf die aktive Präsentation mit der Methode Api.GetPresentation:

var oPresentation = Api.GetPresentation();

Dann fügen wir eine for-Schleife hinzu, die jede Folie der Präsentation durchläuft. i steht hier also für die Gesamtanzahl der Folien. Und wir holen jede Folie, indem wir sie als Index übergeben:

var oPresentation = Api.GetPresentation();
var oPresentation = Api.GetPresentation();
for (let i = 0; i < 10; i++) {
    var oSlide = oPresentation.GetSlideByIndex(i);
}

Danach führen wir die Methode GetAllShapes aus. Sie sammelt alle Formen auf der Folie und gibt sie in einem Array zurück:

var oPresentation = Api.GetPresentation();
for (let i = 0; i < 10; i++) {
    var oSlide = oPresentation.GetSlideByIndex(i);
    var aShape  = oSlide.GetAllShapes();
}

Jetzt müssen wir Formen aus Folien entfernen. Formen und Zeichnungen erben die gleichen Eigenschaften, und das erlaubt uns, die Methode Delete zu verwenden. Sie entfernt eine Form oder eine Zeichnung von der Folie. In unserem Fall befinden sich die Formen am unteren Rand. Wir geben also 0 als Index ein, um alle unteren Elemente zu entfernen:

var oPresentation = Api.GetPresentation();
for (let i = 0; i < 10; i++) {
    var oSlide = oPresentation.GetSlideByIndex(i);
    var aShape  = oSlide.GetAllShapes();
      aShape[0].Delete();
}

Dann fügen wir ein Diagramm hinzu, indem wir die Methode APi.CreateChart implementieren. In den Parametern legen wir den Diagrammstil und die angezeigten Daten fest:

 var oChart = Api.CreateChart("bar3D", [
  [200, 240, 280],
  [250, 260, 280]
  ], ["Projected Revenue", "Estimated Costs"], [2014, 2015, 2016], 4051300, 2347595, 24);

Danach legen wir die Größe und die Position auf der Folie fest. In unserem Fall verkleinern wir ein Diagramm und zentrieren es. So überlappt es nicht den Text. Und wir fügen das Diagramm in die Folie ein, indem wir die Methode AddObject ausführen:

oChart.SetSize(150 * 36000, 90 * 36000);
oChart.SetPosition(3267200, 1000000);
oSlide.AddObject(oChart);

Der gesamte Makrocode sieht wie folgt aus:

(function()
{
    var oPresentation = Api.GetPresentation();
for (let i = 0; i < 10; i++) {
    var oSlide = oPresentation.GetSlideByIndex(i);
    var aShape = oSlide.GetAllShapes();
     aShape[0].Delete();
    var oChart = Api.CreateChart("bar3D", [
       [200, 240, 280],
    [250, 260, 280]
       ], ["Projected Revenue", "Estimated Costs"], [2014, 2015, 2016], 4051300, 2347595, 24);
     oChart.SetSize(150 * 36000, 90 * 36000);
     oChart.SetPosition(3267200, 1000000);
     oSlide.AddObject(oChart);
}
})();

Führen wir jetzt unser Makro aus und sehen wir, wie es funktioniert!

Wir hoffen, dass dieses kleine Makro einige Ihrer alltäglichen Aufgaben erleichtert. ONLYOFFICE-Makros sind extrem vielseitig und können auf Ihre Bedürfnisse zugeschnitten werden. Nutzen Sie unsere API-Methoden und erstellen Sie Ihre eigenen Makros. Sie können uns gerne Fragen stellen oder Ihre Ideen mit uns teilen. Wir sind offen für Diskussionen und Zusammenarbeit. Wir wünschen Ihnen viel Erfolg bei Ihren Experimenten!