Wie kann ich Powerpoint Feld-Inhalte während Runtime ändern? OpenXML, COM und VBA sind wohl nicht ausreichend, daher evtl. 'Memory Manipulation'?



  • Hallo,

    ich versuche, Teile einer laufenden (!) Powerpoint-Präsentation zu ändern.

    Ich würde gerne die Typen (z.B. "datetime2") und Werte (z.B. "Dezember 2020") von Feldern (<a:fld>) in Textboxen ändern. Diese Informationen werden normalerweise in einer XML-Datei gespeichert, aber ich kann die XML-Datei scheinbar nicht ändern, während Powerpoint läuft. Wohlgemerkt, ich möchte das Feld nicht durch ein neues ersetzen, sondern das bestehende ändern.

    AFAIK ist dies nicht mit Open XML, COM, VBA oder direkt in PPT möglich. Daher möchte ich nach anderen Ansätzen wie z.B. der 'Memory Manipulation' fragen. Hat hier jemand Erfahrung damit, speziell in Bezug auf Powerpoint?

    Vielen Dank!



  • Die Werte direkt im Speicher zu ändern kannst du denke ich vergessen.



  • Danke für deine Antwort. Das Powerpoint Addin Thinkcell modifiziert beispielsweise die Felder so wie ich das ebenfalls gerne machen würde (https://social.msdn.microsoft.com/Forums/sqlserver/en-US/9c4ed9c7-1c8e-43bf-afa1-d7ae39e283fd/how-are-nonreserved-types-in-fld-tags-supposed-to-be-interpreted?forum=os_binaryfile). Leider habe ich dazu nur Kommentare mit dem Hinweis auf Memory Manipulation gefunden. Wenn jemand eine andere Idee hat bin ich für jede Hilfe dankbar.



  • Kannst du vielleicht etwas weiter ausführen, warum du es nicht ersetzen möchtest, denn das wäre eine wesentlich einfachere Lösung. Und wenn du sowohl Inhalt als auch Typ ändern möchtest, dann erscheint es mir auch naheliegender es zu ersetzen.



  • @Murmelmann
    Dir ist schon klar dass Thinkcell daran schon jahrelang entwickelt, und jedem Programmierer nach 1 Jahr ein Gehalt von min. EUR 120000 garantiert? Und die haben dann wohl auch einige Ansprüche. Da arbeiten also nicht gerade duchschnittliche Programmierer.

    Soweit ich weiss injecten die eine DLL welche sich dann über Hooking tief in der Applikation vergräbt.

    Wenn du meinst dass du das so nebenbei mal eben schnell hinbekommst... lass dich von mir nicht abhalten.



  • @hustbaer Daher frage ich ja auch nach anderen Möglichkeiten - wie Thinkcell das genau macht ist mir auch nicht bekannt - ich habe lediglich bei meiner Recherche Hinweise darauf gefunden.

    @codingnoobert Den Feldern wird von PPT eine eindeutige ID zugewiesen, die ich gerne behalten möchte um über diese immer auf das selbe Feld zugreifen zu können.

    Meine gewünschten Änderungen an Type und Value lassen sich bei geschlossener Datei im XML problemlos durchführen und PPT akzeptiert diese Änderungen beim nächsten Öffnen auch - bei offener Datei weiß ich aktuell leider aber nicht mehr weiter.



  • @Murmelmann Sorry, dann hab ich dich falsch verstanden. Ich hab das ala "Thinkcell macht das auch, kann ja nicht so schwer sein" verstanden. Und dem wollte ich widersprechen 😉
    Andere Möglichkeit kann ich leider auch keine anbieten.

    Ich hätte an deiner Stelle als erstes mal die offiziell dokumentierten COM/VBA Schnittstellen abgegrast. Falls du das schon durch hast und es damit nicht geht... dann weiss ich auch nix mehr.



  • @hustbaer Kein Problem. Ich vermute, dass es wohl mit der von dir angesprochenen DLL Injection gemacht wird. Jedoch ist es sehr schwierig für dieses doch sehr spezielle Thema einen passenden Ansprechpartner zu finden (auch gegen Bezahlung). Falls jemand hier noch einen Kontakt hat wäre ich sehr dankbar.



  • Was ist denn dein Use-Case? Also was willst du eigentlich erreichen? Anders gesagt: warum willst du den Inhalt eines Felds in einer laufenden PowerPoint Präsentation ändern?



  • Ich möchte Teile von Texten (d.h. nicht ganze Textboxen) identifizieren können, um sie dann bei Bedarf (z.B. Aktualisierung) programmatisch ändern zu können. Felder würden sich hierfür anbieten, da sie eine eindeutige ID haben. "Tags" gehen soweit ich weiß leider nur auf Ebene ganzer "Shapes" und können somit nicht auf einzelne Textteile gesetzt werden.



  • Ich glaube du hast meine Frage nicht verstanden.
    Was willst du erreichen?

    Also warum willst du in der Präsentation Werte ändern können? Warum soll dein Programm das können?


Log in to reply