Wat zit er in een PowerPoint-bestand?
18 augustus 2026
Een PowerPoint-presentatie is een verzameling dia's. Elke dia is een canvas met tekstvakken, vormen, afbeeldingen, tabellen en grafieken. Er zijn geavanceerde elementen zoals animaties, SmartArt en video, maar voor 90% van de professionele dia's zijn deze niet nodig.
Een PowerPoint-bestand is de plek waar al die inhoud wordt opgeslagen zodat de computer deze kan lezen. Het bevat zaken als de tekst die u heeft getypt voor een grafiektitel, ingebedde Excel-bestanden met grafiekgegevens, .png-bestanden van uw bedrijfslogo en de eigenschappen die bepalen hoe alles op uw scherm wordt weergegeven: de lettergrootte van de titel, de kleuren van de gegevenslabels, de rijhoogtes van uw tabel en of uw grafiek rasterlijnen toont.
Hoe wordt al deze informatie opgeslagen?
U zou kunnen proberen alles op te schrijven in een tekstbestand, waarbij elk element en diens eigenschappen worden opgesomd.
Hier is een simpel voorbeeld: een lege dia met één tekstvak waarin "Hello world!" staat. U zou Kladblok kunnen openen en een .txt-bestand kunnen maken dat er ongeveer zo uitziet:
Dia 1
- Breedte = 13,33 inch
- Hoogte = 7,5 inch
- Achtergrond = wit
- Tekstvak 1
- Tekst = "Hello world!"
- Lettertype = Arial
- Lettergrootte = 18
- Tekstkleur = zwart
- Positie = 5,9 inch vanaf de linkerrand, 3,5 inch vanaf de bovenrand
Stel dat u een tweede eenvoudige dia toevoegt. Dan zou u dit aan uw .txt-bestand toevoegen:
Dia 2
- Breedte = 13,33 inch
- Hoogte = 7,5 inch
- Achtergrond = wit
- Tekstvak 1
- Tekst = "Dit is een cirkel"
- Lettertype = Arial
- Lettergrootte = 18
- Tekstkleur = zwart
- Positie = 5,9 inch vanaf de linkerrand, 2 inch vanaf de bovenrand
- Vorm 1
- Vormtype = cirkel
- Opvulling = rood
- Hoogte = 2 inch
- Breedte = 2 inch
- Positie = 5,7 inch vanaf de linkerrand, 2,75 inch vanaf de bovenrand
Wanneer u dit ziet, denkt u waarschijnlijk: "Ik herhaal hier zaken die niet gaan veranderen. Elke dia heeft dezelfde breedte, hoogte en ik gebruik overal hetzelfde lettertype. Ik zal dit consolideren."
Presentatie
- Dia breedte = 13,33 inch
- Dia hoogte = 7,5 inch
- Achtergrond = wit
- Tekstkleur = zwart
- Lettertype = Arial
- Lettergrootte = 18
Dia 1
- Tekstvak 1
- Tekst = "Hello world!"
- Positie = 5,9 inch vanaf de linkerrand, 3,5 inch vanaf de bovenrand
Dia 2
- Tekstvak 1
- Tekst = "Dit is een cirkel"
- Positie = 5,9 inch vanaf de linkerrand, 2 inch vanaf de bovenrand
- Vorm 1
- Vormtype = cirkel
- Opvulling = rood
- Hoogte = 2 inch
- Breedte = 2 inch
- Positie = 5,7 inch vanaf de linkerrand, 2,75 inch vanaf de bovenrand
Dit is beter, maar bij een volledige presentatie van 30 pagina's wordt dit bestand enorm. Daarom besluit u het op te splitsen in kleinere bestanden en deze in mappen te groeperen.
presentatie/
├── presentatie_eigenschappen.txt
└── dia's/
├── dia1.txt
└── dia2.txt
Afbeeldingen en grafieken
Tot nu toe bevatten uw dia's alleen tekst en vormen. Hoe zit het met uw bedrijfslogo? Aangezien u al met mappen werkt, voegt u gewoon een map voor afbeeldingen toe en slaat u de .png- en .jpg-bestanden daarop op.
presentatie/
├── presentatie_eigenschappen.txt
├── dia's/
│ ├── dia1.txt
│ └── dia2.txt
└── afbeeldingen/
└── logo.png
In uw dia verwijst u vervolgens naar het afbeeldingsbestand en specificeert u de grootte en positie. Het voordeel van deze opzet is dat u niet voor elke dia een kopie van de afbeelding hoeft op te slaan als u hetzelfde logo op meerdere dia's gebruikt.
Dia 3
- Afbeelding
- Bron = logo.png
- Hoogte = 7,5 inch
- Breedte = 7,5 inch
- Positie = 2,92 inch vanaf de linkerrand, 0 inch vanaf de bovenrand
Hetzelfde concept kunt u toepassen op grafieken. Excel-bestanden zijn handig voor het opslaan van numerieke gegevens; in plaats van het wiel opnieuw uit te vinden, wijst u aan elke grafiek een .xlsx-bestand toe voor de gegevens.
presentatie/
├── presentatie_eigenschappen.txt
├── dia's/
│ ├── dia1.txt
│ ├── dia2.txt
│ └── dia3.txt
├── afbeeldingen/
│ └── logo.png
└── excel/
└── boek1.xlsx
Vervolgens zorgt u ervoor dat u naar dat bestand verwijst wanneer u de grafiek beschrijft:
Dia 4
- Grafiek
- Bron = boek1.xlsx
- Hoogte = 6 inch
- Breedte = 9 inch
- Positie = 2,17 inch vanaf de linkerrand, 0,75 inch vanaf de bovenrand
- Titel = Grafiektitel
- Toon rasterlijnen = waar
- As max = 6
- As eenheden = 1
...
- Serie 3 opvulling = grijs
De drie puntjes hierboven staan voor veel informatie. Grafieken hebben enorm veel eigenschappen. U kunt bijvoorbeeld één letter in een van de gegevenslabels vet maken, of de horizontale aslijn dikker maken.
Omdat u waarschijnlijk dia's heeft met meerdere grafieken, besluit u voor uw eigen overzicht de grafieken in hun eigen bestanden te plaatsen, gebruikmakend van dezelfde referentiestrategie als bij de afbeeldingen en Excel-bestanden. U verplaatst de grafiekeigenschappen naar een eigen grafiek1.txt bestand en vereenvoudigt dia4.txt tot:
Dia 4
- Grafiek
- Bron = grafiek1.txt
- Hoogte = 6 inch
- Breedte = 9 inch
- Positie = 2,17 inch vanaf de linkerrand, 0,75 inch vanaf de bovenrand
De uiteindelijke mappenstructuur ziet er dan als volgt uit:
presentatie/
├── presentatie_eigenschappen.txt
├── dia's/
│ ├── dia1.txt
│ ├── dia2.txt
│ ├── dia3.txt
│ └── dia4.txt
├── afbeeldingen/
│ └── logo.png
├── excel/
│ └── boek1.xlsx
└── grafieken/
└── grafiek1.txt
De werkelijkheid: ZIP en XML
Gefeliciteerd! U heeft zojuist de basisarchitectuur van .pptx-bestanden nagebootst. Onder de motorkap is een .pptx-bestand namelijk een ZIP-pakket dat veel individuele bestanden bevat. In plaats van ons informele .txt-formaat, wordt er gebruikgemaakt van gestructureerde XML-tekst.
U kunt dit zelf testen door de extensie van een van uw PowerPoint-bestanden te wijzigen van .pptx naar .zip. In de map slides vindt u de individuele dia's. Hoewel we layouts of masters niet hebben behandeld, komt de structuur overeen als u "excel" hernoemt naar "embeddings" en "afbeeldingen" naar "media".
Hoe verschilt XML van eenvoudige tekst?
Laten we een fragment uit slide1.xml bekijken dat het eenvoudige "Hello world!"-voorbeeld bevat.
<p:cSld>
<p:spTree>
<p:sp>
<p:nvSpPr>
<p:cNvPr id="5" name="TextBox 4">
<a:extLst>...</a:extLst>
</p:cNvPr>
<p:cNvSpPr txBox="1"/>
</p:nvSpPr>
<p:spPr>
<a:xfrm>
<a:off x="5359675" y="3244334"/>
<a:ext cx="1472650" cy="369332"/>
</a:xfrm>
<a:prstGeom prst="rect">
<a:avLst/>
</a:prstGeom>
<a:noFill/>
</p:spPr>
<p:txBody>
<a:bodyPr wrap="square" rtlCol="0">
<a:spAutoFit/>
</a:bodyPr>
<a:lstStyle/>
<a:p>
<a:pPr algn="ctr"/>
<a:r>
<a:rPr lang="en-US" dirty="0"/>
<a:t>Hello world!</a:t>
</a:r>
</a:p>
</p:txBody>
</p:sp>
</p:spTree>
</p:cSld>
Dit lijkt op onleesbaar machine-gebrabbel. Het wordt iets duidelijker als u de afkortingen vervangt door volledige woorden:
<CommonSlideData>
<ShapeTree>
<Shape>
<NonVisualShapeProperties>
<NonVisualDrawingProperties id="5" name="TextBox 4">
<ExtensionList>...</ExtensionList>
</NonVisualDrawingProperties>
<NonVisualShapeDrawingProperties isTextBox="1"/>
</NonVisualShapeProperties>
<ShapeProperties>
<Transform>
<Offset x="5359675" y="3244334"/>
<Extents width="1472650" height="369332"/>
</Transform>
<PresetGeometry shape="rectangle">
<AdjustValues/>
</PresetGeometry>
<NoFill/>
</ShapeProperties>
<TextBody>
<BodyProperties wrap="square" rightToLeftColumns="0">
<ShapeAutoFit/>
</BodyProperties>
<ListStyle/>
<Paragraph>
<ParagraphProperties alignment="center"/>
<Run>
<RunProperties language="en-US" dirty="0"/>
<Text>Hello world!</Text>
</Run>
</Paragraph>
</TextBody>
</Shape>
</ShapeTree>
</CommonSlideData>
Als u het XML-raamwerk en de minder belangrijke attributen weghaalt, houdt u dit over:
- Dia
- Vormen
- Tekstvak 4
- X-coordinaat: 5.359.675
- Y-coordinaat: 3.244.334
- Hoogte: 369.332
- Breedte: 1.472.650
- Preset Geometry: rechthoek
- Geen opvulling
- Tekst: Hello world!
De getallen voor positie en grootte zijn niet in inches, maar in een eenheid genaamd EMU — English Metric Unit. Deze getallen zijn zeer groot om floating-point getallen te vermijden en uitsluitend met integers te kunnen werken.
Dit komt dicht in de buurt van uw oorspronkelijke .txt-bestand. De lettergrootte 18 en het lettertype Arial ontbreken, maar dat is logisch. U had deze in presentatie_eigenschappen.txt gezet om herhaling bij elk tekstvak te voorkomen. In een echt .pptx-bestand kunnen theme-lettertypes worden bewaard in theme1.xml in de theme-map:
<a:fontScheme name="Office">
<a:majorFont>
<a:latin typeface="Arial"/>
</a:majorFont>
<a:minorFont>
<a:latin typeface="Arial"/>
</a:minorFont>
</a:fontScheme>
Kortom: een .pptx-bestand is een verzameling XML-bestanden met presentatiegegevens. Er is een map met individuele bestanden per dia, en er zijn enkele XML-bestanden voor gedeelde eigenschappen, zoals lettertypen, die anders telkens opnieuw herhaald zouden moeten worden.
Is het bewerken van PPTX dan eenvoudig?
Dit klinkt allemaal simpel genoeg: geef elke dia een eigen bestand en bewaar veelgebruikte eigenschappen op een gedeelde locatie. De algemene premisse is gezond, maar de feitelijke implementatie is ongelooflijk rommelig.
In 2005, onder druk van overheden voor open documentstandaarden, diende Microsoft de OOXML (Office Open XML) formaten in bij Ecma International voor standaardisatie. Ecma publiceerde de standaard in 2006, en deze werd in 2008 aangenomen als een ISO internationale standaard.
Het hoofddocument is meer dan 5.000 pagina's lang. Dat is vergelijkbaar met vier complete trilogieën van In de Ban van de Ring. Enkelzijdig geprint zou de stapel papier ongeveer 50 centimeter hoog zijn.
Waarom is het zo complex?
The Document Foundation (de makers van LibreOffice, het open-source alternatief voor Microsoft Office) gelooft dat dit een bewuste tactiek van Microsoft is om gebruikers in hun ecosysteem te houden:
"Helaas, hoewel een XML-schema eenvoudig kan zijn, kan het ook onnodig complex, opgeblazen, verwarrend en moeilijk te implementeren zijn zonder specifieke kennis van de functies. Deze kunstmatige complexiteit kenmerkt zich door een diep geneste tagstructuur met excessieve abstractie, tientallen of zelfs honderden optionele of overbelaste elementen, niet-intuïtieve naamgevingsconventies, het wijdverspreide gebruik van extensiepunten en wildcards, de meervoudige import van namespaces en typehiërarchieën, en schaarse of cryptische documentatie."
Het is een bevredigende theorie. Je kunt je voorstellen dat Bill Gates naar Steve Ballmer belt: "Steve, ik heb de meest kwaadaardige ingenieurs nodig die je kunt vinden. Haal het team dat aan Clippy en Windows Update heeft gewerkt. Ik wil dat onze Office-suite volledig ontoegankelijk is voor elke concurrent."
Een andere, minder bevredigende theorie is dat PowerPoint is gemaakt in 1987 en in 1990 op Windows is uitgebracht. De ingenieurs van toen konden onmogelijk weten wat PowerPoint zou worden of waar het voor gebruikt zou worden. Middelbare schooldocenten gebruiken het voor lessen met animaties, terwijl investmentbankiers dezelfde software gebruiken voor bestuursvergaderingen over fusies van beursgenoteerde bedrijven ter waarde van miljarden dollars.
Het is makkelijk om de architectuur veertig jaar later te bekritiseren met de kennis van nu. OOXML zelf is pas ongeveer 20 jaar oud, maar het moest decennia aan PowerPoint-functies en bestaande presentaties representeren. Het is mogelijk dat OOXML een puinhoop is om dezelfde reden waarom elke 40 jaar oude codebase een puinhoop is: niet alleen door een commissie, maar door jaren aan achteraf toegevoegde functies en compatibiliteitsbeslissingen in een formaat dat nooit kapot mag gaan.
Conclusie
Een PowerPoint-bestand is een ZIP-pakket dat XML-bestanden en binaire assets bevat. Het slaat alle eigenschappen op die u in een PowerPoint-presentatie instelt en probeert deze te organiseren in aparte bestanden om herhaling te voorkomen en zaken makkelijker vindbaar te maken.
Helaas is de feitelijke implementatie een mijnenveld van overervingsketens, strikte elementvolgorde, standaarden die door de applicatie worden ingesteld en andere vreemde eigenaardigheden. Dat mijnenveld is de reden waarom het automatiseren van PowerPoint met code zo moeilijk is. En bij uitbreiding is het de reden waarom AI-agents worstelen met schijnbaar eenvoudige bewerkingen.
Die puinhoop is precies wat editide vereenvoudigt voor AI-agents door hen de XML te laten overslaan.
Groetjes,