How to create a PowerPoint presentation with publications
Why use PowerPoint?
Creating the template




Putting it all together

Get the code
Last updated
Modern product management moves fast, and your sales tools need to keep up. Traditionally, creating product presentations meant hours of copy-pasting specs and images into static slides - only for that data to become outdated the moment a price changed.
We have integrated PowerPoint into Publications to automate this process. By linking your slides directly to your Struct PIM data, you can generate presentation-ready slides that are always accurate, beautifully formatted, and ready for the boardroom in a single click.
In this guide, we will go through how to set up a publication that exports a PowerPoints presentation. The source code will be available down below.
Head over to 'Publications' > 'Publication templates', and click on 'Create publication template' in the top right corner of the page.

Set the type to 'Data'.

Set the rendering engine to 'Liquid', and the file format to 'PPTX'. This is crucial for making a PowerPoint presentation.

When you have set everything up, save the template, and head out to the publication template overview.
Find the template that you just created and click the -icon to open the designer. Inside the designer, you are now able to write Liquid.
For this guide, use the following code snippet:
You will now be able to export the publication template example as a PowerPoint presentation. To do so, click 'Download' on the right hand side of the designer.

When everything is set up, the PowerPoint should display the product information specified.

You can download the example used here and import it inside your own PIM instance.
Last updated
{% for productModel in Products %}
{% assign product = productModel.AttributeValues %}
<slide title="Product Overview" transition="fade">
<!-- Product Title -->
<element x="100" y="40" width="800" height="60">
<content>
<paragraph><![CDATA[{{ product.Name.RenderedValue }}]]></paragraph>
</content>
<style fontName="Segoe UI" fontSize="24" bold="true" align="center" color="#1B263B" />
</element>
<!-- Intro Text -->
<element x="100" y="90" width="800" height="60">
<content>
<paragraph><![CDATA[{{ product.ShortDescription.RenderedValue }}]]></paragraph>
</content>
<style fontName="Segoe UI" fontSize="12" italic="true" align="center" color="#333333" />
</element>
<!-- Long Description with Bullets -->
<element x="100" y="160" width="450" height="400">
<content>
<paragraph>
<![CDATA[{{ product.LongDescription.RenderedValue }}]]>
</paragraph>
<paragraph>
</paragraph>
{% for usp in product.USP.Values %}
<bullet><![CDATA[{{ usp.RenderedValue }}]]></bullet>
{% endfor %}
{% for tag in product.CharacteristicaTags.Values %}
<bullet><![CDATA[{{ tag.RenderedValue }}]]></bullet>
{% endfor %}
</content>
<style fontName="Segoe UI" fontSize="10" align="left" color="#333333" />
</element>
<!-- Product Image -->
<element x="580" y="160" width="300" height="270">
<content>
<image src="{{product.PrimaryImage.RenderedValue}}" format="width=600&height=540&format=jpg&bgcolor=ffffff" tag="image"></image>
</content>
</element>
<!-- Feature Table -->
<element x="580" y="440" width="300" height="180">
<content>
<table>
<headers>
<cell>Feature</cell>
<cell>Details</cell>
</headers>
<rows>
{% if product.Year.RenderedValue %}
<row><cell>{{product.Year.Name}}</cell><cell>{{product.Year.RenderedValue}}</cell></row>
{% endif %}
{% if product.Alcohol.RenderedValue %}
<row><cell>{{product.Alcohol.Name}}</cell><cell>{{product.Alcohol.RenderedValue}} {{product.Alcohol.Unit}}</cell></row>
{% endif %}
{% if product.PackagingType.RenderedValue %}
<row><cell>{{product.PackagingType.Name}}</cell><cell><![CDATA[{{product.PackagingType.RenderedValue}}]]></cell></row>
{% endif %}
{% if product.Country.RenderedValue %}
<row><cell>{{product.Country.Name}}</cell><cell><![CDATA[{{product.Country.RenderedValue}}]]></cell></row>
{% endif %}
{% if product.District.RenderedValue %}
<row><cell>{{product.District.Name}}</cell><cell><![CDATA[{{product.District.RenderedValue}}]]></cell></row>
{% endif %}
{% if product.WineMaker.RenderedValue %}
<row><cell>{{product.WineMaker.Name}}</cell><cell><![CDATA[{{product.WineMaker.RenderedValue}}]]></cell></row>
{% endif %}
{% if product.Bluetooth.Value == true %}
<row><cell>{{product.Bluetooth.Name}}</cell><cell>Yes</cell></row>
{% endif %}
{% if product.BluetoothVersion.RenderedValue %}
<row><cell>{{product.BluetoothVersion.Name}}</cell><cell>{{product.BluetoothVersion.RenderedValue}}</cell></row>
{% endif %}
{% if product.ScanFrequency.RenderedValue %}
<row><cell>{{product.ScanFrequency.Name}}</cell><cell>{{product.ScanFrequency.RenderedValue}}</cell></row>
{% endif %}
{% if product.ColorSystem.RenderedValue %}
<row><cell>{{product.ColorSystem.Name}}</cell><cell>{{product.ColorSystem.RenderedValue}}</cell></row>
{% endif %}
{% if product.ModelNumber.RenderedValue %}
<row><cell>{{product.ModelNumber.Name}}</cell><cell><![CDATA[{{product.ModelNumber.RenderedValue}}]]></cell></row>
{% endif %}
</rows>
</table>
</content>
<style fontName="Segoe UI" fontSize="7" cellpadding="2" align="left" />
</element>
<element x="300" y="620" width="300" height="80">
<content>
<image src="{{product.Brand.Values[0].SubAttributeValues.Logo.RenderedValue}}" format="width=600&height=160&format=jpg&bgcolor=ffffff" tag="image"></image>
</content>
</element>
</slide>
{% endfor %}