office-jsoffice-addins

Create a basic web content add-in without Visual Studio and a Windows machine


I'm trying to develop a Content Add-in following the official documentation. The implementation section states that only few changes are needed:

In the same section, two getting started with content-based add-ins are listed for PowerPoint and Excel, but unfortunately they target Visual Studio and I don't own a Windows machine. There is also reference to a 9 years old example Excel-Content-Add-in-Humongous-Insurance, that its manifest looks quite outdated.

I decided to give a try using Yeoman and VScode. Since the yo office office doesn't offer a starter for Content-based Add-in, I opted for using:

? Choose a project type: Office Add-in Task Pane project using React framework
? Choose a script type: TypeScript
? What do you want to name your add-in? my-content-addin
? Which Office client application would you like to support? Powerpoint

Following the documentation listed above I changed the xsi:type of the OfficeApp element to the ContentApp, and added the RequestedHeight and RequestedWidth elements to the DefaultSettings element.

Additionally, I noticed that Excel-Content-Add-in-Humongous-Insurance manifest didn't have the following schema in the OfficeApp:

xmlns:ov="http://schemas.microsoft.com/office/taskpaneappversionoverrides"

I checked the office-addin-manifest repository and I could not find an alternative for Content add-ins e.g., .../contentappversionoverrides. I only found an additional .../mailappversionoverrides.

I also noticed that Excel-Content-Add-in-Humongous-Insurance manifest didn't have that a VersionOverrides element so I removed from my generated manifest.xml. So, I ended with:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<OfficeApp 
  xmlns="http://schemas.microsoft.com/office/appforoffice/1.1" 
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  xmlns:bt="http://schemas.microsoft.com/office/officeappbasictypes/1.0" 
  xsi:type="ContentApp">
  <Id>9e2e38ec-67af-43e6-8aeb-c8c3e22b86bd</Id>
  <Version>1.0.0.0</Version>
  <ProviderName>Contoso</ProviderName>
  <DefaultLocale>en-US</DefaultLocale>
  <DisplayName DefaultValue="my-content-addin"/>
  <Description DefaultValue="A template to get started."/>
  <IconUrl DefaultValue="https://localhost:3000/assets/icon-32.png"/>
  <HighResolutionIconUrl DefaultValue="https://localhost:3000/assets/icon-64.png"/>
  <SupportUrl DefaultValue="https://www.contoso.com/help"/>
  <AppDomains>
    <AppDomain>https://www.contoso.com</AppDomain>
  </AppDomains>
  <Hosts>
    <Host Name="Presentation"/>
  </Hosts>
  <DefaultSettings>
    <SourceLocation DefaultValue="https://localhost:3000/taskpane.html"/>
    <RequestedHeight>400</RequestedHeight>
    <RequestedWidth>400</RequestedWidth>
  </DefaultSettings>
  <Permissions>ReadWriteDocument</Permissions>
</OfficeApp>

After that I tried to validate the manifest and I got this errors:

Error #1: 
XML Schema Validation Error: Error found during XML Schema validation.
  - Details: The element 'DefaultSettings' in namespace 'http://schemas.microsoft.com/office/appforoffice/1.1' has invalid child element 'RequestedWidth' in namespace 'http://schemas.microsoft.com/office/appforoffice/1.1'.
  - Line: 25
  - Column: 6

Error #2: 
XML Schema Violation: Your manifest does not adhere to the current set of XML schema definitions for Office Add-in manifests.

I removed RequestedWidth although it seems to known by manifestHandlerXml.ts module from office-addin-manifest, and tried again. This time the manifest was valid. So, I ran npm start and my add-in was added to the current slide automatically.

This is my final manifest.xml

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<OfficeApp 
  xmlns="http://schemas.microsoft.com/office/appforoffice/1.1" 
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  xmlns:bt="http://schemas.microsoft.com/office/officeappbasictypes/1.0" 
  xsi:type="ContentApp">
  <Id>9e2e38ec-67af-43e6-8aeb-c8c3e22b86bd</Id>
  <Version>1.0.0.0</Version>
  <ProviderName>Contoso</ProviderName>
  <DefaultLocale>en-US</DefaultLocale>
  <DisplayName DefaultValue="my-content-addin"/>
  <Description DefaultValue="A template to get started."/>
  <IconUrl DefaultValue="https://localhost:3000/assets/icon-32.png"/>
  <HighResolutionIconUrl DefaultValue="https://localhost:3000/assets/icon-64.png"/>
  <SupportUrl DefaultValue="https://www.contoso.com/help"/>
  <AppDomains>
    <AppDomain>https://www.contoso.com</AppDomain>
  </AppDomains>
  <Hosts>
    <Host Name="Presentation"/>
  </Hosts>
  <DefaultSettings>
    <SourceLocation DefaultValue="https://localhost:3000/taskpane.html"/>
    <RequestedHeight>400</RequestedHeight>
  </DefaultSettings>
  <Permissions>ReadWriteDocument</Permissions>

</OfficeApp>

How can specify a default width for my content add-in?

How can insert my add-in only when I click on a Ribbon Command like the default TaskPane demo open the taskpane?

In the Yeoman Taskpane Demo VersionOverrides requires a schema xmlns="http://schemas.microsoft.com/office/taskpaneappversionoverrides". What would be the alternative for the Control action element: <Action xsi:type="ShowTaskpane"> in a content-based add-in?

enter image description here


Solution

  • The <RequestedWidth> has to come just above the <RequestedHeight>.

    There is no way to add a button to the ribbon in a Content Add-in. The content is inserted into the open Office document as soon as the add-in is installed.