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:
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?
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;
[b]Aktuelles Verhalten[/b] [list] [*]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]{ "group1": { "child_elements": [ "rectangle1", "rectangle2", "line1", "rectangle3", "rectangle4" ] } }
[/code]
[/list] [b]Erwartetes Verhalten[/b] [list] [*]Sollte Gruppe2 und Gruppe3 als verschachtelte Gruppen innerhalb von Gruppe1 erkennen [*]Der JSON sollte die hierarchische Struktur beibehalten [/list] [b]Hinweis:[/b] 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: [list] [*]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 [/list] [b]Mögliche Lösungen[/b] 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: [list] [*]Verstehen der PPTX-XML-Struktur [*]Implementierung von benutzerdefiniertem XML Parsing-Logik [*]Aufrechterhaltung der Kompatibilität mit verschiedenen PowerPoint-Versionen [/list] [b]Frage[/b] 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?
Ich versuche, ein klassisches VSTO Outlook-Add-In-Projekt in das SDK-Format umzuwandeln und gleichzeitig die vollständige VSTO-Funktionalität beizubehalten. Beide CSPROJ Projektdateien kompilieren...
Ich versuche, ein klassisches VSTO Outlook-Add-In-Projekt in das SDK-Format umzuwandeln und gleichzeitig die vollständige VSTO-Funktionalität beizubehalten. Beide CSPROJ Projektdateien kompilieren...
Ich versuche, ein klassisches VSTO Outlook-Add-In-Projekt in das SDK-Format umzuwandeln und gleichzeitig die vollständige VSTO-Funktionalität beizubehalten. Beide CSPROJ Projektdateien kompilieren...
Ich versuche, ein klassisches VSTO Outlook-Add-In-Projekt in das SDK-Format umzuwandeln und gleichzeitig die vollständige VSTO-Funktionalität beizubehalten. Beide CSPROJ Projektdateien kompilieren...
Wie kann ich ein OLE -Objekt (Excel -Tabelle) in PowerPoint mit Pyautogui und Win32COM in PowerPoint einfügen und die Größe des Einfügens von Paste -Paste -Paste -Paste -Coping -Kopieren einer Excel...