From 5e4e81a233afcfe23296488eaa24e80eec05a0cc Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Fri, 14 Nov 2025 14:08:48 -0800 Subject: [PATCH 1/2] [PowerPoint] (Shape) Add placeholder snippet --- playlists-prod/powerpoint.yaml | 2 +- playlists/powerpoint.yaml | 2 +- .../powerpoint/shapes/get-shapes-by-type.yaml | 72 +++++++++--- snippet-extractor-metadata/powerpoint.xlsx | Bin 17009 -> 17131 bytes snippet-extractor-output/snippets.yaml | 108 ++++++++++++++++++ 5 files changed, 164 insertions(+), 20 deletions(-) diff --git a/playlists-prod/powerpoint.yaml b/playlists-prod/powerpoint.yaml index 1864b779..ec45fbc6 100644 --- a/playlists-prod/powerpoint.yaml +++ b/playlists-prod/powerpoint.yaml @@ -97,7 +97,7 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/get-shapes-by-type.yaml group: Shapes api_set: - PowerPointApi: '1.4' + PowerPointApi: '1.8' - id: powerpoint-shapes-add-modify-tables name: Add and modify tables fileName: add-modify-tables.yaml diff --git a/playlists/powerpoint.yaml b/playlists/powerpoint.yaml index 46985f3b..1f89450b 100644 --- a/playlists/powerpoint.yaml +++ b/playlists/powerpoint.yaml @@ -97,7 +97,7 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/shapes/get-shapes-by-type.yaml group: Shapes api_set: - PowerPointApi: '1.4' + PowerPointApi: '1.8' - id: powerpoint-shapes-add-modify-tables name: Add and modify tables fileName: add-modify-tables.yaml diff --git a/samples/powerpoint/shapes/get-shapes-by-type.yaml b/samples/powerpoint/shapes/get-shapes-by-type.yaml index 7eba070e..b1d42f81 100644 --- a/samples/powerpoint/shapes/get-shapes-by-type.yaml +++ b/samples/powerpoint/shapes/get-shapes-by-type.yaml @@ -4,12 +4,13 @@ name: Select shapes by type description: Gets shapes in a slide based on their type, such as GeometricShape or Line. host: POWERPOINT api_set: - PowerPointApi: '1.4' + PowerPointApi: '1.8' script: - content: |- + content: | document.getElementById("setup").addEventListener("click", () => tryCatch(setup)); document.getElementById("change-lines").addEventListener("click", () => tryCatch(changeLines)); document.getElementById("change-geometric-shapes").addEventListener("click", () => tryCatch(changeGeometricShapes)); + document.getElementById("get-placeholder-shapes").addEventListener("click", () => tryCatch(getPlaceholderShapes)); async function changeLines() { // Changes the dash style of every line in the slide. @@ -48,6 +49,38 @@ script: }); } + async function getPlaceholderShapes() { + // Gets the placeholder shapes in the slide. + await PowerPoint.run(async (context) => { + // Get properties for every shape in the collection. + const shapes: PowerPoint.ShapeCollection = context.presentation.slides.getItemAt(0).shapes; + shapes.load("type,name"); + await context.sync(); + + const placeholderShapes = []; + console.log(`Number of shapes found: ${shapes.items.length}`); + shapes.items.forEach((shape) => { + if (shape.type === PowerPoint.ShapeType.placeholder) { + // Load placeholderFormat property. + // PowerPoint throws an exception if you try to load this property on a shape that isn't a placeholder type. + shape.load("placeholderFormat"); + placeholderShapes.push(shape); + } + }); + await context.sync(); + + console.log(`Number of placeholder shapes found: ${placeholderShapes.length}`); + for (let i = 0; i < placeholderShapes.length; i++) { + let currentPlaceholder: PowerPoint.PlaceholderFormat = placeholderShapes[i].placeholderFormat; + let placeholderType = currentPlaceholder.type as PowerPoint.PlaceholderType; + let placeholderContainedType = currentPlaceholder.containedType as PowerPoint.ShapeType; + console.log(`Shape "${placeholderShapes[i].name}" placeholder properties:`); + console.log(`\ttype: ${placeholderType}`); + console.log(`\tcontainedType: ${placeholderContainedType}`); + } + }); + } + async function setup() { await PowerPoint.run(async (context) => { // Create shapes of different types. @@ -58,13 +91,13 @@ script: left: 100, top: 100, height: 150, - width: 150 + width: 150, }); shapes.addGeometricShape(PowerPoint.GeometricShapeType.octagon, { left: 400, top: 300, height: 150, - width: 150 + width: 150, }); // Create lines. @@ -72,13 +105,13 @@ script: left: 400, top: 150, height: 20, - width: 150 + width: 150, }); shapes.addLine(PowerPoint.ConnectorType.curve, { left: 100, top: 300, height: 150, - width: 20 + width: 20, }); await context.sync(); @@ -98,26 +131,29 @@ script: template: content: |-
-

This sample shows how select and change shapes based on their types.

+

This sample shows how select and change shapes based on their types.

-

Setup

-

Create some shapes in a new, blank presentation.

-

- -

-

Try it out

-

- -

- -

+

+

language: html style: diff --git a/snippet-extractor-metadata/powerpoint.xlsx b/snippet-extractor-metadata/powerpoint.xlsx index 27d2f9dba0f8debe277ad83d17b2a3f4ce478887..845aab9a8e838001a532783fe0e0390461ac4862 100644 GIT binary patch delta 9155 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 C&@JEq delta 9016 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 MvY- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/get-shapes-by-type.yaml + + + // Gets the placeholder shapes in the slide. + + await PowerPoint.run(async (context) => { + // Get properties for every shape in the collection. + const shapes: PowerPoint.ShapeCollection = context.presentation.slides.getItemAt(0).shapes; + shapes.load("type,name"); + await context.sync(); + + const placeholderShapes = []; + console.log(`Number of shapes found: ${shapes.items.length}`); + shapes.items.forEach((shape) => { + if (shape.type === PowerPoint.ShapeType.placeholder) { + // Load placeholderFormat property. + // PowerPoint throws an exception if you try to load this property on a shape that isn't a placeholder type. + shape.load("placeholderFormat"); + placeholderShapes.push(shape); + } + }); + await context.sync(); + + console.log(`Number of placeholder shapes found: ${placeholderShapes.length}`); + for (let i = 0; i < placeholderShapes.length; i++) { + let currentPlaceholder: PowerPoint.PlaceholderFormat = placeholderShapes[i].placeholderFormat; + let placeholderType = currentPlaceholder.type as PowerPoint.PlaceholderType; + let placeholderContainedType = currentPlaceholder.containedType as PowerPoint.ShapeType; + console.log(`Shape "${placeholderShapes[i].name}" placeholder properties:`); + console.log(`\ttype: ${placeholderType}`); + console.log(`\tcontainedType: ${placeholderContainedType}`); + } + }); +PowerPoint.PlaceholderType:enum: + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/get-shapes-by-type.yaml + + + // Gets the placeholder shapes in the slide. + + await PowerPoint.run(async (context) => { + // Get properties for every shape in the collection. + const shapes: PowerPoint.ShapeCollection = context.presentation.slides.getItemAt(0).shapes; + shapes.load("type,name"); + await context.sync(); + + const placeholderShapes = []; + console.log(`Number of shapes found: ${shapes.items.length}`); + shapes.items.forEach((shape) => { + if (shape.type === PowerPoint.ShapeType.placeholder) { + // Load placeholderFormat property. + // PowerPoint throws an exception if you try to load this property on a shape that isn't a placeholder type. + shape.load("placeholderFormat"); + placeholderShapes.push(shape); + } + }); + await context.sync(); + + console.log(`Number of placeholder shapes found: ${placeholderShapes.length}`); + for (let i = 0; i < placeholderShapes.length; i++) { + let currentPlaceholder: PowerPoint.PlaceholderFormat = placeholderShapes[i].placeholderFormat; + let placeholderType = currentPlaceholder.type as PowerPoint.PlaceholderType; + let placeholderContainedType = currentPlaceholder.containedType as PowerPoint.ShapeType; + console.log(`Shape "${placeholderShapes[i].name}" placeholder properties:`); + console.log(`\ttype: ${placeholderType}`); + console.log(`\tcontainedType: ${placeholderContainedType}`); + } + }); PowerPoint.Presentation:class: - >- // Link to full sample: @@ -17137,6 +17209,42 @@ PowerPoint.Shape#left:member: currentLeft = 0; if (currentTop > slideHeight - 200) currentTop = 0; }); +PowerPoint.Shape#placeholderFormat:member: + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/get-shapes-by-type.yaml + + + // Gets the placeholder shapes in the slide. + + await PowerPoint.run(async (context) => { + // Get properties for every shape in the collection. + const shapes: PowerPoint.ShapeCollection = context.presentation.slides.getItemAt(0).shapes; + shapes.load("type,name"); + await context.sync(); + + const placeholderShapes = []; + console.log(`Number of shapes found: ${shapes.items.length}`); + shapes.items.forEach((shape) => { + if (shape.type === PowerPoint.ShapeType.placeholder) { + // Load placeholderFormat property. + // PowerPoint throws an exception if you try to load this property on a shape that isn't a placeholder type. + shape.load("placeholderFormat"); + placeholderShapes.push(shape); + } + }); + await context.sync(); + + console.log(`Number of placeholder shapes found: ${placeholderShapes.length}`); + for (let i = 0; i < placeholderShapes.length; i++) { + let currentPlaceholder: PowerPoint.PlaceholderFormat = placeholderShapes[i].placeholderFormat; + let placeholderType = currentPlaceholder.type as PowerPoint.PlaceholderType; + let placeholderContainedType = currentPlaceholder.containedType as PowerPoint.ShapeType; + console.log(`Shape "${placeholderShapes[i].name}" placeholder properties:`); + console.log(`\ttype: ${placeholderType}`); + console.log(`\tcontainedType: ${placeholderContainedType}`); + } + }); PowerPoint.Shape#top:member: - >- // Link to full sample: From 847ef8c94b39ad4c3ad4fc5c047dbfebd3fa7a56 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Mon, 17 Nov 2025 07:31:02 -0800 Subject: [PATCH 2/2] Fix typo --- samples/powerpoint/shapes/get-shapes-by-type.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/powerpoint/shapes/get-shapes-by-type.yaml b/samples/powerpoint/shapes/get-shapes-by-type.yaml index c95edc18..aa447c8d 100644 --- a/samples/powerpoint/shapes/get-shapes-by-type.yaml +++ b/samples/powerpoint/shapes/get-shapes-by-type.yaml @@ -131,7 +131,7 @@ script: template: content: |-
-

This sample shows how select and change shapes based on their types.

+

This sample shows how to select and change shapes based on their types.

Setup