Wie erkennt man verschachtelte Gruppen in PowerPoint mithilfe von VSTO (C#)?C#

Ein Treffpunkt für C#-Programmierer
Anonymous
 Wie erkennt man verschachtelte Gruppen in PowerPoint mithilfe von VSTO (C#)?

Post by Anonymous »

VSTO ist nicht in der Lage, v e r s c h a c h t e l t e G r u p p e n i n P o w e r P o i n t - F o l i e n z u e r f a s s e n . < / p > < b r / > B e t r a c h t e n S i e b e i s p i e l s w e i s e d i e s e S t r u k t u r : < / p > < b r / > < c o d e > G r o u p 1 : < b r / > ├ ─ ─ G r o u p 2 : < b r / > │ ├ ─ ─ R e c t a n g l e 1 < b r / > │ ├ ─ ─ R e c t a n g l e 2 < b r / > │ └ ─ ─ L i n e ( c o n n e c t i n g R e c t a n g l e 1 a n d R e c t a n g l e 2 ) < b r / > └ ─ ─ G r o u p 3 : < b r / > ├ ─ ─ R e c t a n g l e 3 < b r / > └ ─ ─ R e c t a n g l e 4 < b r / > < / c o d e > < b r / > W i r d a l s p p t a n g e z e i g t : < / p > < b r / > < i m g a l t = " p o w e r p o i n t g r o u p e l e m e n t s " s r c = " h t t p s : / / i . s s t a t i c . n e t / L h e D 6 w p d . p n g " / > < / p > < b r / > W i r d a l s s l i d e s . x m l a n g e z e i g t < / c o d e > : < / p > < b r / > < d i v c l a s s = " s n i p p e t " > < b r / > < d i v c l a s s = " s n i p p e t - c o d e " > < b r / > < p r e c l a s s = " s n i p p e t - c o d e - h t m l l a n g - h t m l P r e t t y p r i n t - o v e r r i d e " > < c o d e > & l t ; ? x m l v e r s i o n = " 1 . 0 " e n c o d i n g = " U T F - 8 " s t a n d a l o n e = " y e s " ? & g t ; < b r / > & l t ; p : s l d x m l n s : a = " h t t p : / / s c h e m a s . o p e n x m l f o r m a t s . o r g / d r a w i n g m l / 2 0 0 6 / m a i n " x m l n s : r = " h t t p : / / s c h e m a s . o p e n x m l f o r m a t s . o r g / o f f i c e D o c u m e n t / 2 0 0 6 / r e l a t i o n s h i p s " x m l n s : p = " h t t p : / / s c h e m a s . o p e n x m l f o r m a t s . o r g / p r e s e n t a t i o n m l / 2 0 0 6 / m a i n " & g t ; < b r / > & l t ; p : c S l d & g t ; < b r / > & l t ; p : s p T r e e & g t ; < b r / > & l t ; p : n v G r p S p P r & g t ; < b r / > & l t ; p : c N v P r i d = " 1 " n a m e = " " / & g t ; < b r / > & l t ; p : c N v G r p S p P r / & g t ; < b r / > & l t ; p : n v P r / & g t ; < b r / > & l t ; / p : n v G r p S p P r & g t ; < b r / > & l t ; p : g r p S p P r & g t ; < b r / > & l t ; a : x f r m & g t ; < b r / > & l t ; a : o f f x = " 0 " y = " 0 " / & g t ; < b r / > & l t ; a : e x t c x = " 0 " c y = " 0 " / & g t ; < b r / > & l t ; a : c h O f f x = " 0 " y = " 0 " / & g t ; < b r / > & l t ; a : c h E x t c x = " 0 " c y = " 0 " / & g t ; < b r / > & l t ; / a : x f r m & g t ; < b r / > & l t ; / p : g r p S p P r & g t ; < b r / > & l t ; p : g r p S p & g t ; < b r / > & l t ; p : n v G r p S p P r & g t ; < b r / > & l t ; p : c N v P r i d = " 1 4 " n a m e = " g r o u p 1 3 " / & g t ; < b r / > & l t ; p : c N v G r p S p P r / & g t ; < b r / > & l t ; p : n v P r / & g t ; < b r / > & l t ; / p : n v G r p S p P r & g t ; < b r / > & l t ; p : g r p S p P r & g t ; < b r / > & l t ; a : x f r m & g t ; < b r / > & l t ; a : o f f x = " 1 5 1 5 2 9 1 " y = " 1 8 2 8 8 0 0 " / & g t ; < b r / > & l t ; a : e x t c x = " 5 4 8 6 4 0 0 " c y = " 3 4 2 2 4 6 9 " / & g t ; < b r / > & l t ; a : c h O f f x = " 1 5 1 5 2 9 1 " y = " 1 8 2 8 8 0 0 " / & g t ; < b r / > & l t ; a : c h E x t c x = " 5 4 8 6 4 0 0 " c y = " 3 4 2 2 4 6 9 " / & g t ; < b r / > & l t ; / a : x f r m & g t ; < b r / > & l t ; / p : g r p S p P r & g t ; < b r / > & l t ; p : g r p S p & g t ; < b r / > & l t ; p : n v G r p S p P r & g t ; < b r / > & l t ; p : c N v P r i d = " 1 2 " n a m e = " g r o u p 1 1 " / & g t ; < b r / > & l t ; p : c N v G r p S p P r / & g t ; < b r / > & l t ; p : n v P r / & g t ; < b r / > & l t ; / p : n v G r p S p P r & g t ; < b r / > & l t ; p : g r p S p P r & g t ; < b r / > & l t ; a : x f r m & g t ; < b r / > & l t ; a : o f f x = " 1 5 1 5 2 9 1 " y = " 1 8 2 8 8 0 0 " / & g t ; < b r / > & l t ; a : e x t c x = " 5 4 8 6 4 0 0 " c y = " 1 4 1 0 7 8 9 " / & g t ; < b r / > & l t ; a : c h O f f x = " 1 5 1 5 2 9 1 " y = " 1 8 2 8 8 0 0 " / & g t ; < b r / > & l t ; a : c h E x t c x = " 5 4 8 6 4 0 0 " c y = " 1 4 1 0 7 8 9 " / & g t ; < b r / > & l t ; / a : x f r m & g t ; < b r / > & l t ; / p : g r p S p P r & g t ; < b r / > & l t ; p : s p & g t ; < b r / > & l t ; p : n v S p P r & g t ; < b r / > & l t ; p : c N v P r i d = " 4 " n a m e = " r e c t a n g l e 3 " / & g t ; < b r / > & l t ; p : c N v S p P r / & g t ; < b r / > & l t ; p : n v P r / & g t ; < b r / > & l t ; / p : n v S p P r & g t ; < b r / > & l t ; p : s p P r & g t ; < b r / > & l t ; a : x f r m & g t ; < b r / > & l t ; a : o f f x = " 1 5 1 5 2 9 1 " y = " 1 8 2 8 8 0 0 " / & g t ; < b r / > & l t ; a : e x t c x = " 2 0 1 1 6 8 0 " c y = " 1 4 1 0 7 8 9 " / & g t ; < b r / > & l t ; / a : x f r m & g t ; < b r / > & l t ; a : p r s t G e o m p r s t = " r e c t " & g t ; < b r / > & l t ; a : a v L s t / & g t ; < b r / > & l t ; / a : p r s t G e o m & g t ; < b r / > & l t ; / p : s p P r & g t ; < b r / > & l t ; p : s t y l e & g t ; < b r / > & l t ; a : l n R e f i d x = " 2 " & g t ; < b r / > & l t ; a : s c h e m e C l r v a l = " a c c e n t 1 " & g t ; < b r / > & l t ; a : s h a d e v a l = " 5 0 0 0 0 " / & g t ; < b r / > & l t ; / a : s c h e m e C l r & g t ; < b r / > & l t ; / a : l n R e f & g t ; < b r / > & l t ; a : f i l l R e f i d x = " 1 " & g t ; < b r / > & l t ; a : s c h e m e C l r v a l = " a c c e n t 1 " / & g t ; < b r / > & l t ; / a : f i l l R e f & g t ; < b r / > & l t ; a : e f f e c t R e f i d x = " 0 " & g t ; < b r / > & l t ; a : s c h e m e C l r v a l = " a c c e n t 1 " / & g t ; < b r / > & l t ; / a : e f f e c t R e f & g t ; < b r / > & l t ; a : f o n t R e f i d x = " m i n o r " & g t ; < b r / > & l t ; a : s c h e m e C l r v a l = " l t 1 " / & g t ; < b r / > & l t ; / a : f o n t R e f & g t ; < b r / > & l t ; / p : s t y l e & g t ; < b r / > & l t ; p : t x B o d y & g t ; < b r / > & l t ; a : b o d y P r r t l C o l = " 0 " a n c h o r = " c t r " / & g t ; < b r / > & l t ; a : l s t S t y l e / & g t ; < b r / > & l t ; a : p & g t ; < b r / > & l t ; a : p P r a l g n = " c t r " / & g t ; < b r / > & l t ; a : e n d P a r a R P r l a n g = " z h - C N " a l t L a n g = " e n - U S " / & g t ; < b r / > & l t ; / a : p & g t ; < b r / > & l t ; / p : t x B o d y & g t ; < b r / > & l t ; / p : s p & g t ; < b r / > & l t ; p : s p & g t ; < b r / > & l t ; p : n v S p P r & g t ; < b r / > & l t ; p : c N v P r i d = " 5 " n a m e = " r e c t a n g l e 4 " / & g t ; < b r / > & l t ; p : c N v S p P r / & g t ; < b r / > & l t ; p : n v P r / & g t ; < b r / > & l t ; / p : n v S p P r & g t ; < b r / > & l t ; p : s p P r & g t ; < b r / > & l t ; a : x f r m & g t ; < b r / > & l t ; a : o f f x = " 4 9 9 0 0 1 1 " y = " 1 8 2 8 8 0 0 " / & g t ; < b r / > & l t ; a : e x t c x = " 2 0 1 1 6 8 0 " c y = " 1 4 1 0 7 8 9 " / & g t ; < b r / > & l t ; / a : x f r m & g t ; < b r / > & l t ; a : p r s t G e o m p r s t = " r e c t " & g t ; < b r / > & l t ; a : a v L s t / & g t ; < b r / > & l t ; / a : p r s t G e o m & g t ; < b r / > & l t ; / p : s p P r & g t ; < b r / > & l t ; p : s t y l e & g t ; < b r / > & l t ; a : l n R e f i d x = " 2 " & g t ; < b r / > & l t ; a : s c h e m e C l r v a l = " a c c e n t 1 " & g t ; < b r / > & l t ; a : s h a d e v a l = " 5 0 0 0 0 " / & g t ; < b r / > & l t ; / a : s c h e m e C l r & g t ; < b r / > & l t ; / a : l n R e f & g t ; < b r / > & l t ; a : f i l l R e f i d x = " 1 " & g t ; < b r / > & l t ; a : s c h e m e C l r v a l = " a c c e n t 1 " / & g t ; < b r / > & l t ; / a : f i l l R e f & g t ; < b r / > & l t ; a : e f f e c t R e f i d x = " 0 " & g t ; < b r / > & l t ; a : s c h e m e C l r v a l = " a c c e n t 1 " / & g t ; < b r / > & l t ; / a : e f f e c t R e f & g t ; < b r / > & l t ; a : f o n t R e f i d x = " m i n o r " & g t ; < b r / > & l t ; a : s c h e m e C l r v a l = " l t 1 " / & g t ; < b r / > & l t ; / a : f o n t R e f & g t ; < b r / > & l t ; / p : s t y l e & g t ; < b r / > & l t ; p : t x B o d y & g t ; < b r / > & l t ; a : b o d y P r r t l C o l = " 0 " a n c h o r = " c t r " / & g t ; < b r / > & l t ; a : l s t S t y l e / & g t ; < b r / > & l t ; a : p & g t ; < b r / > & l t ; a : p P r a l g n = " c t r " / & g t ; < b r / > & l t ; a : e n d P a r a R P r l a n g = " z h - C N " a l t L a n g = " e n - U S " / & g t ; < b r / > & l t ; / a : p & g t ; < b r / > & l t ; / p : t x B o d y & g t ; < b r / > & l t ; / p : s p & g t ; < b r / > & l t ; p : c x n S p & g t ; < b r / > & l t ; p : n v C x n S p P r & g t ; < b r / > & l t ; p : c N v P r i d = " 8 " n a m e = " D i r e c t a r r o w c o n n e c t o r 7 " / & g t ; < b r / > & l t ; p : c N v C x n S p P r & g t ; < b r / > & l t ; a : s t C x n i d = " 4 " i d x = " 3 " / & g t ; < b r / > & l t ; a : e n d C x n i d = " 5 " i d x = " 1 " / & g t ; < b r / > & l t ; / p : c N v C x n S p P r & g t ; < b r / > & l t ; p : n v P r / & g t ; < b r / > & l t ; / p : n v C x n S p P r & g t ; < b r / > & l t ; p : s p P r & g t ; < b r / > & l t ; a : x f r m & g t ; < b r / > & l t ; a : o f f x = " 3 5 2 6 9 7 1 " y = " 2 5 3 4 1 9 5 " / & g t ; < b r / > & l t ; a : e x t c x = " 1 4 6 3 0 4 0 " c y = " 0 " / & g t ; < b r / > & l t ; / a : x f r m & g t ; < b r / > & l t ; a : p r s t G e o m p r s t = " s t r a i g h t C o n n e c t o r 1 " & g t ; < b r / > & l t ; a : a v L s t / & g t ; < b r / > & l t ; / a : p r s t G e o m & g t ; < b r / > & l t ; a : l n & g t ; < b r / > & l t ; a : t a i l E n d t y p e = " t r i a n g l e " / & g t ; < b r / > & l t ; / a : l n & g t ; < b r / > & l t ; / p : s p P r & g t ; < b r / > & l t ; p : s t y l e & g t ; < b r / > & l t ; a : l n R e f i d x = " 1 " & g t ; < b r / > & l t ; a : s c h e m e C l r v a l = " a c c e n t 1 " / & g t ; < b r / > & l t ; / a : l n R e f & g t ; < b r / > & l t ; a : f i l l R e f i d x = " 0 " & g t ; < b r / > & l t ; a : s c h e m e C l r v a l = " a c c e n t 1 " / & g t ; < b r / > & l t ; / a : f i l l R e f & g t ; < b r / > & l t ; a : e f f e c t R e f i d x = " 0 " & g t ; < b r / > & l t ; a : s c h e m e C l r v a l = " a c c e n t 1 " / & gt;





















































































































Aktuelles Verhalten
  • VSTO kann nur alle Elemente innerhalb von Gruppe1 finden, kann aber nicht erkennen, dass Gruppe2 und Gruppe3 als verschachtelte Gruppen existieren
  • Die resultierende JSON-Struktur wird abgeflacht, wodurch die hierarchische Beziehung verloren geht:

    Code: Select all

    {
    "group1": {
    "child_elements": [
    "rectangle1",
    "rectangle2",
    "line1",
    "rectangle3",
    "rectangle4"
    ]
    }
    }
    
    
Erwartetes Verhalten
  • Sollte Gruppe2 und Gruppe3 als verschachtelte Gruppen innerhalb von Gruppe1 erkennen
  • Der JSON sollte die hierarchische Struktur beibehalten
Hinweis: Das habe ich überprüft python-pptx kann diese verschachtelten Gruppenbeziehungen erfolgreich erkennen und analysieren, sodass die Daten in der Dateistruktur vorhanden sind.
Was ich versucht habe:
  • Debuggen in Visual Studio: Verfügbare VSTO-APIs durchsucht, konnte aber keine Möglichkeit finden, auf verschachtelte Gruppen zuzugreifen
  • ID-Abgleichsansatz: Es wurde versucht, Formgruppen-IDs mit übergeordneten Gruppen-IDs abzugleichen, aber dies fehlgeschlagen
Mögliche Lösungen
Ein möglicher Ansatz besteht darin, die PowerPoint-XML-Datei direkt zu analysieren (ähnlich wie python-pptx funktioniert), um Gruppenbeziehungen zu extrahieren.
Dies würde jedoch Folgendes erfordern:
  • Verstehen der PPTX-XML-Struktur
  • Implementierung von benutzerdefiniertem XML Parsing-Logik
  • Aufrechterhaltung der Kompatibilität mit verschiedenen PowerPoint-Versionen
Frage
Gibt es eine VSTO-API oder -Methode zum Erkennen verschachtelter Gruppen in PowerPoint, die mir fehlt? Oder ist das direkte Parsen des XML die einzig praktikable Lösung?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post