Open XML SDK - программное добавление макроса в документ Word 2007 - PullRequest
4 голосов
/ 21 декабря 2010

Я пытаюсь динамически добавить новую пользовательскую ленту в документ Word 2007, следуя ручному методу, описанному в этой статье: - http://msdn.microsoft.com/en-us/library/aa338202(v=office.12).aspx.

В статье указано следующее: -

a) Создайте файл XML с именем customUI.xml, который будет содержать элементы, которые вы хотите отобразить на вкладке, и поместите их в папку с именем customUI.

b) Переименуйте документ Word 2007 в .zip.Добавьте указанную выше папку «customUI» в zip-файл.

c) Добавьте следующее отношение к файлу «_rels / rels» в .zip-файле: -

<Relationship Type="http://schemas.microsoft.com/office/2006/
  relationships/ui/extensibility" Target="/customUI/customUI.xml" 
  Id="customUIRelID" />

Делаем ли мыУ вас есть пример кода для достижения того же с использованием OpenXML SDK?Например, как добавить «RibbonExtensibilityPart» (который содержит XML-ленту) в документ?

РЕДАКТИРОВАТЬ : -

Вот как я делал вышеупомянутоешаги: -

 string documentFileName = <path of the docx file>;
  string ribbonXml        =  <path of the ribbon XML file>;
 using (WordprocessingDocument myDoc = WordprocessingDocument.Open(documentFileName, true))
 {
   MainDocumentPart mainPart = myDoc.MainDocumentPart;

   if (myDoc.GetPartsCountOfType<RibbonExtensibilityPart>() > 0)
      myDoc.DeletePart(myDoc.GetPartsOfType<RibbonExtensibilityPart>().First());

   RibbonExtensibilityPart ribbonExtensibilityPart = myDoc.AddNewPart<RibbonExtensibilityPart>();
   ribbonExtensibilityPart.CustomUI = new DocumentFormat.OpenXml.Office.CustomUI.CustomUI(File.ReadAllText(ribbonXML));

   myDoc.CreateRelationshipToPart(ribbonExtensibilityPart);
 }

и я могу видеть новую ленту с элементами в ней.Тем не менее, у меня есть кнопки на ленте, и я хочу добавить действия с этими кнопками.Вот как выглядит мой Ribbon XML: -

<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui">
  <ribbon>
    <tabs>
      <tab id="CustomTab" label="My Tab">
        <group id="MyGroup" label="My Group" >
          <button id="Button1" label="My Large Button" 
            size="large"/>
          <button id="Button2" label="My Normal Button" 
            size="normal" *onAction="ThisDocument.MyOtherButtonMacro"* />
        </group >
      </tab>
    </tabs>
  </ribbon>
</customUI>

, посмотрите на " onAction =" ThisDocument.MyOtherButtonMacro". Я знаю, что могу написать функцию макроса в документе.Однако, поскольку пользовательская лента будет добавляться динамически на стороне сервера, я не уверен, как можно динамически добавлять макрос. Кто-нибудь может помочь?

...