Как обнаружить вложенные группы в PowerPoint с помощью VSTO (C#)?C#

Место общения программистов C#
Ответить
Anonymous
 Как обнаружить вложенные группы в PowerPoint с помощью VSTO (C#)?

Сообщение Anonymous »

VSTO не может захватывать вложенные группы в слайдах PowerPoint. Например, р а с с м о т р и м с л е д у ю щ у ю с т р у к т у р у : < / 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 / > п о к а з а т ь к а к p p t < / p > < b r / > < i m g a l t = " э л е м е н т ы г р у п п ы P o w e r P o i n t " 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 / > п о к а з а т ь к а к с л а й д ы . x m l < / 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 " / >





















































































































Текущее поведение:
  • VSTO может найти только все элементы в пределах группы 1, но не может обнаружить, что группы 2 и группа 3 существуют как вложенные группы.
  • Результирующая структура JSON сглаживается, теряя иерархические отношения:

    Код: Выделить всё

    {
    "group1": {
    "child_elements": [
    "rectangle1",
    "rectangle2",
    "line1",
    "rectangle3",
    "rectangle4"
    ]
    }
    }
    
    
Ожидаемое поведение:
  • Группа2 и Группа3 должны обнаруживаться как вложенные группы в Группу1.
  • JSON должен сохранять иерархическую структуру.
Примечание: Я проверил, что python-pptx может успешно обнаруживать и проанализировать эти отношения вложенных групп, чтобы данные существовали в файловой структуре.
Что я пробовал
  • Отладка в Visual Studio: Выполнил поиск по доступным API VSTO, но не смог найти способ доступа к вложенным группам.
  • Подход сопоставления идентификаторов: Попытался сопоставить идентификаторы групп фигур с идентификаторами родительских групп, но это не удалось
Возможные решения
Один из возможных подходов — прямой анализ XML-файла PowerPoint (аналогично тому, как работает python-pptx) для извлечения групповых связей. Однако для этого потребуется:
  • Понимание структуры XML PPTX
  • Реализация пользовательской логики синтаксического анализа XML
  • Поддержание совместимости с различными версиями PowerPoint
Вопрос
Существует ли VSTO API или метод для обнаружения вложенных групп в PowerPoint, который мне не хватает? Или непосредственный анализ XML является единственным жизнеспособным решением?

Подробнее здесь: https://stackoverflow.com/questions/798 ... ing-vsto-c
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»