2013-07-13 6 views
0

Я хочу создать собственное свойство документа в powerpoint, которое связано с содержимым документа на C#.Создайте свойство персонализированного документа документа, связанного с содержимым внутри документа

Я нашел несколько примеров, но все они создают пользовательские свойства документа БЕЗ связывания с содержимым документа.

Что я хочу достичь, так это то, что пользователь выбирает текст в любой форме и, нажимая кнопку, создается собственное свойство документа вместе со ссылкой на источник. Я хочу, чтобы иметь возможность получить его позже и по требованию перейти к связанному контенту.

Вот фрагмент кода, который я использую:

Microsoft.Office.Core.DocumentProperties properties; 
properties = (Office.DocumentProperties)this.myOCMModule.PowerPointApp.ActivePresentation.CustomDocumentProperties; 
Microsoft.Office.Interop.PowerPoint.Selection powerPointSelection = this.myMainOCMModule.PowerPointApp.ActiveWindow.Selection; 
PowerPoint.TextRange textRange = powerPointSelection.TextRange; 
properties.Add("Test1", true, Microsoft.Office.Core.MsoDocProperties.msoPropertyTypeString, textRange.Text, textRange); 

В создается пользовательское свойство, но ссылка не является действительным. Когда я открываю пользовательские свойства в PowerPoint, это свойство появляется со сломанной ссылкой.

Когда я делаю это вручную, создавая настраиваемое свойство, он работает, когда делает это, как описано here. Я хочу сделать то же самое программно.

В MS ссылки говорится

Источником указанной ссылке определяется приложением контейнера.

Возможно, он не может правильно изменить переменную textRange?

Кто-нибудь знает, как я могу сделать эту работу?

+0

Ссылка довольно старая; PPT так сильно изменился, что я даже не могу найти параметр Edit/GoTo, и когда вы добавляете свойство, которое ссылается на контент в PPT 2010, оно показывает значок ссылки рядом с ним, но я не вижу никаких способ заставить его делать что-либо. –

ответ

0

См. Комментарий выше, но я думаю, что может быть более надежный/управляемый способ делать то, что вы хотите.

Когда пользователь создает одну из ваших «закладок», ваш код может добавить тег в соответствующую форму. В VBA, это так просто, как:

oSh.Tags.Add "TagName", "Value of my tag" 
' assuming oSh contains a reference to the shape you want to mark 

Вы хотите использовать один и тот же имя тега каждый раз, но изменить значение тега для каждой формы.

Для перехода к помеченным содержанию, что-то вроде этого (вставить обязательное предупреждение aircode здесь):

Sub JumpToTaggedContent(sTagValue as String) 
Dim oSl as Slide 
Dim oSh as Shape 
    For Each oSl in ActivePresentation.Slides 
    For Each oSh in oSl.Shapes 
     If oSh.Tags("TagName") = sTagValue Then ' you've found it 
      ActiveWindow.View.GoToSlide(oSh.Parent.SlideIndex) 
      oSh.Select 
      Exit Sub 
     End If 
    Next 
    Next 
End Sub 
Смежные вопросы