Microsoft Office Apps: Powerpoint und das Javascript API

Was tun, wenn die IT-Abteilung den Einsatz von ComAddIns zur Automation von Word, Excel und Powerpoint verweigert? Diese Frage stellten wir uns jüngst in einem Projekt. CI/CD sollen mit Hilfe eines Powerpoint Toolkits an 25.700 Anwender ausgerollt werden. Word und Excel sollen später folgen. Unsere CI-Toolkits auf Basis von ComAddIns machen den Job mit Links bei über 123.000 Anwendern, doch wenn die fleißigen Heinzelmännchen ihren Job nicht machen dürfen, wird der Ruf nach einer tragfähigen Alternative laut. Wir haben den Microsoft Office Apps auf den Zahn gefühlt – „Evaluiert“ haben wir die Brüder.

Microsoft Office Apps
für Word, Excel und Powerpoint

Nach unserer Exkursion in Microsofts Produktdschungel melden wir uns zurück und haben erst mal das Bedürfnis, in den Wildwuchs an Namen und Begriffen ein wenig Ordnung zu bringen, damit Sie mit Ihrem bereits vorhandenen Wissen besser andocken können.

Das JavaScript AddIn

Die Microsoft Office Apps nutzen das sogenannte JavaScript AddIn. Das JavaScript AddIn wird in den Dokumentationen von Microsoft mit verschiedenen Namen gerufen. Es hört auf

  1. Office-JS
  2. Office Javascript
  3. Apps for Office
  4. Office Add-In

Gemeint ist aber immer das Gleiche. Wir werden hier einheitlich von den Apps for Office sprechen.

Office 365, Office Online und Office Desktop

Auch bei den Microsoft Office Produkten gibt es eine ganze Reihe von Kandidaten, auf die immer wieder Bezug genommen wird.

  • Microsoft Office 365
  • Microsoft Office Online
  • Microsoft Office Desktop

Microsoft Office 365

Microsoft Office 365 ist ein Online-Produkt und es besitzt ein kostenpflichtiges Lizenzmodell. Es beinhaltet Microsoft Office Online.
Mehr Informationen zu Microsoft Office 365 findet man hier:
https://de.wikipedia.org/wiki/Microsoft_Office_365

Microsoft Office Online

Microsoft Office Online ist ein kostenfreies Produkt. Es ist in Microsoft Office 365 enthalten.

Microsoft Office Desktop

Mit Microsoft Office Desktop bezeichnet man den Klassiker, wie wir alle ihn auf unserem PC und Schlepptop kennen. Microsoft schreibt, dass alles, was in Microsoft Office auf dem Desktop unterstützt wird, auch online unterstützt wird. Das soll zumindest für die 2016er Version gelten. Na, das ist doch schon mal was.

Das API in den Microsoft Office Produkten

Die Anwendungsentwicklung wäre ja so einfach, wenn ein Standard sich durch alle Office-Produkte und ihre Versionen durchziehen würde. Es wäre ein Traum! Wir entwickeln CI/CD-Toolkits für Microsoft Office seit dem Jahr 2000 und wir haben die Hoffnung noch nicht aufgegeben, dass Microsoft uns unseren Wunsch dereinst erfüllen wird.

Das Microsoft Word Javascript API

Das Microsoft Word Javascript API ist mit Microsoft Office 2016 verfügbar. Bislang kennen Sie sicher bereits das VBA/.Net-API. Wir haben uns vor Jahren mit ihm angefreundet und entlocken mit seiner Hilfe dem Microsoft Office Paket immer wieder Kunststückchen, die man dem angegrauten Package nie zutrauen würde. Jetzt wäre es natürlich schön, wenn Microsoft z.B. in der Word Javascript API einfach die bisher verfügbare VBA/.Net-API nachbilden würde.

Um es in der Sprache der Generation Y auszudrücken…
Wir so: „Na, wär doch toll“… Microsoft dann so: „Nö!“

In Ansätzen gibt das neue JavaScript API schon einiges her, was wir von früher kennen und auch hier erwartet haben. Leider aber nicht alles. Es ist unvollständig. Offenbar kam der Rollout-Termin zu schnell.

Wer mehr im Detail nachlesen möchte, kann dies hier tun:
https://dev.office.com/reference/add-ins/word/word-add-ins-reference-overview

Das Microsoft Excel Javascript API

Zum Microsoft Word Javascript API haben wir gerade ein paar Worte verloren. Das Microsoft Excel Javascript API hat mit seinem Word-Geschwister vieles gemeinsam, leider nicht alles. Gemein haben beide, dass sie erst ab Microsoft Office 2016 verfügbar sind. Nicht gemein hat das Excel-Geschwister den Abbildungs-Umfang des bekannten VBA/.Net-API des Word-API. Es ist schlichtweg weniger. Damit steht auch fest, dass man in Microsoft Excel Apps sehr viel weniger abbilden kann, als man es über VBA / ComAddIns gewohnt war.

Das sollte uns nicht abschrecken. Es bleibt zu hoffen, dass da noch ein wenig in Folgeversionen nachgelegt wird. Es wird ja sicher nicht nur uns aufgefallen sein.

Wer mehr im Detail nachlesen möchte, kann dies hier tun:
https://dev.office.com/reference/add-ins/excel/excel-add-ins-reference-overview

Das Microsoft Powerpoint Javascript API

Wer bei dem Microsoft Javascript API für Word und Excel bereits mit schmerzverzerrtem Gesicht aufgeschrieen hat, der sollte sich eines zufriedenen Lächelns befleißigen, denn wirklich schlimm dran sind WIR, die wir uns im oben angesprochenen Projekt mit Microsoft Powerpoint befassen dürfen.

Das Microsoft Powerpoint Javascript API… Ähem… das gibt’s leider nicht. (Stand: 12.02.2018)

Man fühlt sich an die bekannte Fehlermeldung von Microsoft Sharepoint erinnert, die da lautet „Leider das hat nicht geklappt!“

Hier würden wir eigentlich gerne einen Link zu einer Microsoft Seite geben, aber wo nix ist, wird auch nix drüber geschrieben. Die Kollegen auf StackOverflow haben sich allerdings ein wenig darüber ausgelassen. Bitte sehr. Hier geht’s lang.
https://stackoverflow.com/questions/42060429/powerpoint-command-like-insert-slide-or-apply-theme-equivalent-on-office-javascr

Die Rettung? Shared API, JavaScript API for Office (Office.js)

Die allgemeine API könnte ja auch etwas Unterstützung beisteuern. Sie wurde in Microsoft Office 2013 eingeführt. Darüber kann man bei Microsoft auch einiges Nachlesen (https://dev.office.com/reference/add-ins/javascript-api-for-office). Leider leistet die allgemeine API von Microsoft nicht so wirklich viel. Facebook und YouTube würden jetzt sagen „Das tut uns leid.“. Jedoch ist Microsoft nicht zu derlei Zugeständnissen bereit.

Da die allgemeine API unter Microsoft Powerpoint die einzige Basis für die Entwicklung einer Microsoft Office App ist, müssen wir uns zwangsläufig damit befassen. Tun wir auch. Kommt gleich. Oder um in der Sprache „Y“ zu bleiben: Microsoft so: „Nö“. Wir dann so: „Doch“.

Das allgemeine Microsoft Javascript API kommt ins Spiel, wenn kein spezifisches API verfügbar ist. Doch was genau leistet das allgemeine Javascript API für unser Projektziel mit Microsoft Powerpoint? (#1)
Das allgemeine Microsoft Javascript API kommt ins Spiel, wenn kein spezifisches API verfügbar ist. Doch was genau leistet das allgemeine Javascript API für unser Projektziel mit Microsoft Powerpoint? (#1)

Das allgemeine Microsoft Javascript API

Okay, wir haben uns den Kandidaten mal vorgeknöpft und aufs Unerbittlichste evaluiert. Was kann das allgemeine Microsoft Javascript API in einer Powerpoint-App leisten?

Nachfolgend finden Sie unsere Ergebnisse. Kleine Anmerkung dazu? Wir haben nicht nur gelesen, wir haben auch gecodet. Unser Robert (das ist der Herr Preis mit dem Foto in der Marginalie) hat sich das angetan. Sein Kaffeeverbrauch ist gestiegen. Nicht so sehr wie bei mancher Sharepoint-Aufgabe (pro Schuchtung benötigt man zwei Kannen starken Kaffee) aber doch beachtlich.

#1 Lesen der Selektion

Die Selektion ist das, was unser Anwender gerade markiert hat. In Powerpoint kann das vielerlei sein, von Shape über Text bis zu einem Platzhalter. In Word ist es etwas textlastiger, in Excel ein wenig numerischer. Je nachdem, in welcher Anwendung wir uns aufhalten, sind die Ergebnisse des Auslesens auch verschieden.
Wer in die Details eintauchen möchte, kann dies hier tun: https://dev.office.com/reference/add-ins/shared/coerciontype-enumeration .

Microsoft nennt es so: PowerPoint supports only

  • Office.CoercionType.Text,
  • Office.CoercionType.Image and
  • Office.CoercionType.SlideRange

Was bei unseren Tests zuverlässig funktionierte, das war das Erhalten von Text, also der Stringrepräsentation der selektierten Ojekte.

#2 Schreiben der Selektion

Unsere CI/CD-Toolkits nehmen auch Änderungen in den Microsoft Office Dokumenten vor, in diesem Fall auch in der Powerpoint Präsentation. Das Zurückschreiben in die Selektion ist ein wenig grobschlächtig, da es ja stets den gesamten Selektionsinhalt betrifft. Da stellte sich unsereiner natürlich schon mal die Frage, wie denn unterschiedliche Objekte in der Selektion anzusprechen sein werden.
Glücklicherweise ist diese technische Detailfrage gar nicht relevant. Wir können ausschließlich

  • Text (Office.CoercionType.Text) oder ein
  • Image (Office.CoercionType.Image)

zurückschreiben. Diese geschmackvolle Auswahl an Datentypen macht es deutlich: Wenn das Lesen der Selektion Objekte geliefert hätte, würden wir sie definitiv NICHT zurückschreiben können.

Diese umwerfende Funktionsvielfalt ist bei Microsoft wohldokumentiert, nämlich hier: https://dev.office.com/reference/add-ins/shared/document.setselecteddataasync

Mehr erfahren…

Wenn Sie jetzt darauf hoffen, an dieser Stelle ungeahnte Schätze bergen zu können, dann sagen wir es mal mit Microsoft: „Nö!“. Wir (vor allem unser Robert) waren auch überrascht bis irritiert. Text lesen und Text/Image schreiben ist das, was geht. Wie es aussieht, kann Microsoft Word momentan am meisten, danach kommt Microsoft Excel und Microsoft Powerpoint kommt gar nicht.

Eigenschaften eines Image mit dem Microsoft Javascript API auslesen

Das sollte man vielleicht noch anmerken: Das Einfügen eines Image kann in einen Platzhalter stattfinden oder unspezifisch als floating auf der aktuellen Folie. Jetzt wäre es natürlich traumhaft einige Minimalinformationen auslesen zu können, wie beispielsweise die Bildgrößen. Aber auch das ist leider nicht möglich. Aber zumindest kann man beim Einfügen eines Bildes einige Daten an PowerPoint übergeben.

Beispielcode für das Einsetzen eines Image in Powerpoint

Infografik: Der Beispielcode lässt mittels einer Microsoft Office App ein Image in einen Platzhalter einfügen.
Infografik: Der Beispielcode lässt mittels einer Microsoft Office App ein Image in einen Platzhalter einfügen.

Die Microsoft Dialog API

Auch die Microsoft Dialog API ist dokumentiert: https://dev.office.com/reference/add-ins/requirement-sets/dialog-api-requirement-sets.

Das Microsoft Office Addin

Es gibt auch für das Microsoft Office Addin eine Dokumentation, auch zu den Anforderungen: https://dev.office.com/reference/add-ins/requirement-sets/office-add-in-requirement-sets.

Was genau kann man sinnvolles über eine Microsoft Office App entwickeln?

Kopf hoch! Wer die ersten Zeilen dieses Artikels gelesen hat, der könnte möglicherweise etwas verstimmt oder deprimiert sein. Das muss aber gar nicht sein. Es gibt eine Reihe von Services, die man in einer Microsoft Powerpoint App unterbringen kann.

#1: Zugriff auf Bildbibliotheken

Die Powerpoint App verhält sich wie eine ganz normale Webseite. So kann man dort via eingegebenem Suchbegriff oder über Klick ausgewählte Tags in Bild-Datenbanken Assets auswählen und in die Powerpoint-Präsentation einfügen.

Der Code für all dies liegt in der als App eingebundenen Webseite / Web-Applikation, die auch auf einem internen Server liegen kann. Damit hat man alle Zugriffe nach außen unter Kontrolle. Auch die spätere Weiterentwicklung und Pflege der Web-Applikation kann erfolgen, ohne an der Microsoft Powerpoint App Änderungen vornehmen zu müssen, sofern die verabredete Schnittstellendefinition weiter eingehalten wird.

#2: Zugriff auf Datengeber

Textdaten können auch lecker schmecken. Dies können aktuelle Zahlenwerke aus der Organisation sein oder Textbausteine oder andere generierte Texte – oder auch schlicht der aktuelle Disclaimer.

Hier liegt der Nutzen auf der Benutzung eines einheitlichen Datenrepository durch alle angeschlossenen Nutzer in der Organisation.

#3: Zugriff auf Datenbanken

Ja, da sind wir nerdige Entwickler voll in unserem Element. Datenbanken gehen auf dem per Powerpoint App angedockten Web-Applikation natürlich auf jeden Fall. Der Datenbankzugriff belastet auch nicht unsere Ressourcen auf dem System, auf dem die Microsoft Powerpoint App gerade läuft.

Wie liefere ich eine Tabelle per Powerpoint App zurück?

Wer eine Tabelle zurückliefern möchte, muss nicht verzweifeln. Das einfachste ist hier, die Tabelle gleich als CI/CD-konforme Grafik aufzubereiten. Damit nimmt man dem Anwender auch die Arbeit ab, die Daten der Tabelle CI/CD-konform auszubereiten.

Wie liefere ich ein Chart per Powerpoint App zurück?

Das wäre die klassische Anwendung, mit der man aus einer Excelddatei oder einer anderen Quelle ein Chart in die aktuelle Powerpoint Präsentation einfügen möchte. Liegt die Quelle auf einem Server, welcher über die Web-Applikation zugreifbar ist, dann empfiehlt es sich auch hier, direkt eine aufbereitete Grafik zurückzuliefern. Das Chart wird sich dann nicht bei Änderung der zugrunde liegenden Daten aktualisieren, aber das nimmt man dann eben in Kauf.

Unser Fazit

Die Microsoft Office Apps sind in keiner Weise ein vollwertiger Ersatz für VBA bzw. ComAddIns. Dennoch kann es durchaus Sinn machen, eine Powerpoint App mit dem Minimal-Javascript-API aufzubauen.

Im oben genannten Projekt haben wir uns dazu entschlossen, genau die hier genannten Einsatzmöglichkeiten vorzustellen.

Es wird wie immer vom Einzelfall abhängen, aber da beraten wir gerne. Wenn Sie Fragen zum Microsoft Office Apps haben… Ich helfe Ihnen gerne weiter.

Rufen Sie mich jetzt an: 06131 / 36 80 51

Hans-Jürgen Schwarzer


Bildnachweis: © schwarzer.de Infografik, shutterstock – Titelbild CHEN WS, #1 Ev. Safronov