From ad15b2b2f7c44588b59ac37882304152c67290ac Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Thu, 1 May 2025 09:40:18 -0700 Subject: [PATCH 1/3] [PowerPoint] Add export-import-slide snippet --- playlists-prod/powerpoint.yaml | 9 + playlists/powerpoint.yaml | 9 + .../slide-management/export-import-slide.yaml | 298 ++++++++++++++++++ view-prod/powerpoint.json | 1 + view/powerpoint.json | 1 + 5 files changed, 318 insertions(+) create mode 100644 samples/powerpoint/slide-management/export-import-slide.yaml diff --git a/playlists-prod/powerpoint.yaml b/playlists-prod/powerpoint.yaml index 543434d4..8af29493 100644 --- a/playlists-prod/powerpoint.yaml +++ b/playlists-prod/powerpoint.yaml @@ -133,6 +133,15 @@ group: Slide Management api_set: PowerPointApi: '1.5' +- id: powerpoint-slide-management-export-import-slide + name: Export and import slide + fileName: export-import-slide.yaml + description: Shows how to export and import a slide. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/slide-management/export-import-slide.yaml + group: Slide Management + api_set: + PowerPointApi: '1.8' - id: powerpoint-tags name: Work with tags fileName: tags.yaml diff --git a/playlists/powerpoint.yaml b/playlists/powerpoint.yaml index 72f4c2f5..bf4afe0e 100644 --- a/playlists/powerpoint.yaml +++ b/playlists/powerpoint.yaml @@ -133,6 +133,15 @@ group: Slide Management api_set: PowerPointApi: '1.5' +- id: powerpoint-slide-management-export-import-slide + name: Export and import slide + fileName: export-import-slide.yaml + description: Shows how to export and import a slide. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/slide-management/export-import-slide.yaml + group: Slide Management + api_set: + PowerPointApi: '1.8' - id: powerpoint-tags name: Work with tags fileName: tags.yaml diff --git a/samples/powerpoint/slide-management/export-import-slide.yaml b/samples/powerpoint/slide-management/export-import-slide.yaml new file mode 100644 index 00000000..17d029e2 --- /dev/null +++ b/samples/powerpoint/slide-management/export-import-slide.yaml @@ -0,0 +1,298 @@ +order: 5 +id: powerpoint-slide-management-export-import-slide +name: Export and import slide +description: Shows how to export and import a slide. +host: POWERPOINT +api_set: + PowerPointApi: '1.8' +script: + content: | + document.getElementById("export-slide-button").addEventListener("click", () => tryCatch(exportSlide)); + document.getElementById("clear-exported-slide-button").addEventListener("click", () => tryCatch(clearExportedSlide)); + document.getElementById("import-slide-button").addEventListener("click", () => tryCatch(importSlide)); + document.getElementById("slide-image-button").addEventListener("click", () => tryCatch(addSlideImageToNewSlide)); + document.getElementById("setup").addEventListener("click", () => tryCatch(setup)); + + async function exportSlide() { + // Exports current slide. + await PowerPoint.run(async (context) => { + const slide = context.presentation.getSelectedSlides().getItemAt(0); + const slideBase64DataResult = slide.exportAsBase64(); + const imageBase64DataResult = slide.getImageAsBase64({ height: 300 }); + await context.sync(); + + localStorage.setItem("exportedSlide", slideBase64DataResult.value); + localStorage.setItem("exportedSlideImage", imageBase64DataResult.value); + + updateSlideImage(imageBase64DataResult.value); + + console.log("Slide was exported."); + }); + } + + function clearExportedSlide() { + // Clears exported slide. + localStorage.removeItem("exportedSlide"); + localStorage.removeItem("exportedSlideImage"); + updateSlideImage(""); + console.log("Exported slide was cleared."); + } + + async function importSlide() { + // Imports the slide that was most recently exported. + const slideBase64Data = localStorage.getItem("exportedSlide"); + + await PowerPoint.run(async (context) => { + const currentSlide = context.presentation.getSelectedSlides().getItemAt(0); + currentSlide.load("id"); + await context.sync(); + + context.presentation.insertSlidesFromBase64(slideBase64Data, { targetSlideId: currentSlide.id }); + }); + } + + async function getSlideImage(options?: PowerPoint.SlideGetImageOptions): Promise { + // Gets slide image. + return PowerPoint.run(async (context) => { + const slide = context.presentation.getSelectedSlides().getItemAt(0); + const imageBase64Result = slide.getImageAsBase64(options); + await context.sync(); + + return imageBase64Result.value; + }); + } + + async function getImageDimensions(base64Data: string): Promise<{ width: number; height: number }> { + // Gets image dimensions. + return new Promise((resolve, reject) => { + const image = new Image(); + image.onerror = () => { + reject(); + }; + image.onload = () => { + resolve({ width: image.width, height: image.height }); + }; + image.src = `data:image/png;base64,${base64Data}`; + }); + } + + async function addSlideWithImage(imageBase64): Promise { + // Adds a new slide including an image. + return PowerPoint.run(async (context) => { + const presentation = context.presentation; + const currentSlide = presentation.getSelectedSlides().getItemAt(0); + const slideCountResult = context.presentation.slides.getCount(); + + currentSlide.layout.load(); + await context.sync(); + + const slideCount = slideCountResult.value; + + console.log(`Adding slide using layout ${currentSlide.layout.id}`); + + // Add a new slide at the end of the presentation. + context.presentation.slides.add({ layoutId: currentSlide.layout.id }); + try { + await context.sync(); + } catch (err) { + console.error(`Unable to add slide (with layout from current slide). ${err}`); + + // Try adding without specifying the layout. + context.presentation.slides.add(); + + try { + await context.sync(); + } catch (err) { + console.error(`Unable to add slide. ${err}`); + throw err; + } + } + + console.log("Slide added"); + + // Get added slide. + const slide = context.presentation.slides.getItemAt(slideCount); + + slide.load(["id"]); + + await context.sync(); + + console.log(`Added slide id: ${slide.id}`); + + // Switch to the new slide. + context.presentation.setSelectedSlides([slide.id]); + try { + await context.sync(); + } catch (err) { + console.error(`Unable to switch to the new slide. ${err}`); + throw err; + } + + console.log("Switched to the added slide."); + + const activeSlide = context.presentation.getSelectedSlides().getItemAt(0); + activeSlide.load(["id"]); + await context.sync(); + + console.log(`Active slide id: ${activeSlide.id}`); + + const imageDimensions = await getImageDimensions(imageBase64); + const shapeAddOptions = { + height: imageDimensions.height, + width: imageDimensions.width + }; + + let shape; + + shape = await addImageToCurrentSlide(imageBase64); + shape.load(["id"]); + await context.sync(); + + // Select the added image. + activeSlide.setSelectedShapes([shape.id]); + await context.sync(); + }); + } + + async function addImageToCurrentSlide( + imageBase64: string, + options?: PowerPoint.ShapeAddOptions + ): Promise { + // Adds an image to the current slide. + const setSelectedDataOptions: Office.SetSelectedDataOptions = { + coercionType: Office.CoercionType.Image + }; + if (options) { + if (options.height) { + setSelectedDataOptions.imageHeight = options.height; + } + if (options.left) { + setSelectedDataOptions.imageLeft = options.left; + } + if (options.top) { + setSelectedDataOptions.imageTop = options.top; + } + if (options.width) { + setSelectedDataOptions.imageWidth = options.width; + } + } + + return new Promise((resolve, reject) => { + Office.context.document.setSelectedDataAsync( + imageBase64, + setSelectedDataOptions, + async (result: Office.AsyncResult) => { + if (result.error) { + console.error(`ERROR in setSelectedDataAsync(): ${result.error}`); + reject(result.error); + } else { + const shape = await PowerPoint.run(async (context) => { + const slide = context.presentation.getSelectedSlides().getItemAt(0); + slide.shapes.load(); + await context.sync(); + + return slide.shapes.items[slide.shapes.items.length - 1]; + }); + resolve(shape); + } + } + ); + }); + } + + async function addSlideImageToNewSlide() { + // Adds an image of current slide to the new slide. + const imageBase64 = await getSlideImage({ height: 500 }); + + await addSlideWithImage(imageBase64); + } + + function updateSlideImage(imageBase64: string) { + const slideImageElement = document.getElementById("slide-image") as HTMLImageElement; + slideImageElement.src = imageBase64 ? `data:image/png;base64,${imageBase64}` : ""; + } + + async function setup() { + await PowerPoint.run(async (context) => { + // Adds a new slide with some content. + const slideCountResult = context.presentation.slides.getCount(); + context.presentation.slides.add(); + await context.sync(); + + const newSlide = context.presentation.slides.getItemAt(slideCountResult.value); + newSlide.load("id"); + newSlide.shapes.addGeometricShape(PowerPoint.GeometricShapeType.hexagon); + await context.sync(); + + console.log(`Added slide - ID: ${newSlide.id}`); + + // Switch to the new slide. + context.presentation.setSelectedSlides([newSlide.id]); + await context.sync(); + }); + } + + // Default helper for invoking an action and handling errors. + async function tryCatch(callback) { + try { + await callback(); + } catch (error) { + // Note: In a production add-in, you'd want to notify the user through your add-in's UI. + console.error(error); + } + } + language: typescript +template: + content: |- +
+ This sample demonstrates how to export and import a slide. +
+
+

Set up

+ +
+
+

Try it out

+ + + +

Once a slide has been exported, click the Import slide button to insert into the presentation.

+

To add it to a different presentation, open that presentation and select a slide. It will be inserted after the + selected slide.

+
+

Click the button to add the current slide image onto a new slide at the end of the presentation.

+ +
+ language: html +style: + content: |- + section.samples { + margin-top: 20px; + } + + section.samples .ms-Button, section.setup .ms-Button { + display: block; + margin-bottom: 5px; + margin-left: 20px; + min-width: 80px; + } + language: css +libraries: |- + https://appsforoffice.microsoft.com/lib/1/hosted/office.js + @types/office-js + + office-ui-fabric-js@1.4.0/dist/css/fabric.min.css + office-ui-fabric-js@1.4.0/dist/css/fabric.components.min.css + + core-js@2.4.1/client/core.min.js + @types/core-js \ No newline at end of file diff --git a/view-prod/powerpoint.json b/view-prod/powerpoint.json index 6563b54a..65c681cc 100644 --- a/view-prod/powerpoint.json +++ b/view-prod/powerpoint.json @@ -14,6 +14,7 @@ "powerpoint-insert-slides": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/slide-management/insert-slides.yaml", "powerpoint-basics-get-slide-metadata": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/slide-management/get-slide-metadata.yaml", "powerpoint-slide-management-get-set-slides": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/slide-management/get-set-slides.yaml", + "powerpoint-slide-management-export-import-slide": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/slide-management/export-import-slide.yaml", "powerpoint-tags": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/tags/tags.yaml", "powerpoint-text-get-set-textrange": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/text/get-set-textrange.yaml" } \ No newline at end of file diff --git a/view/powerpoint.json b/view/powerpoint.json index 7f1b2874..bc88aaa5 100644 --- a/view/powerpoint.json +++ b/view/powerpoint.json @@ -14,6 +14,7 @@ "powerpoint-insert-slides": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/slide-management/insert-slides.yaml", "powerpoint-basics-get-slide-metadata": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/slide-management/get-slide-metadata.yaml", "powerpoint-slide-management-get-set-slides": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/slide-management/get-set-slides.yaml", + "powerpoint-slide-management-export-import-slide": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/slide-management/export-import-slide.yaml", "powerpoint-tags": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/tags/tags.yaml", "powerpoint-text-get-set-textrange": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/text/get-set-textrange.yaml" } \ No newline at end of file From 7ab0d40b8ba682e0918cec6a2e1f62c7b41ad90a Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Mon, 5 May 2025 14:17:08 -0700 Subject: [PATCH 2/3] Updates based on suggestions --- .../powerpoint/slide-management/export-import-slide.yaml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/samples/powerpoint/slide-management/export-import-slide.yaml b/samples/powerpoint/slide-management/export-import-slide.yaml index 17d029e2..52cde308 100644 --- a/samples/powerpoint/slide-management/export-import-slide.yaml +++ b/samples/powerpoint/slide-management/export-import-slide.yaml @@ -41,6 +41,10 @@ script: async function importSlide() { // Imports the slide that was most recently exported. const slideBase64Data = localStorage.getItem("exportedSlide"); + if (slideBase64Data === null) { + console.warn("Unable to import. You must first export a slide."); + return; + } await PowerPoint.run(async (context) => { const currentSlide = context.presentation.getSelectedSlides().getItemAt(0); @@ -286,6 +290,10 @@ style: margin-left: 20px; min-width: 80px; } + + img { + border: 5px solid #555; + } language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js From eadce36816c44f83238a80b4275b73bcb0577f98 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Mon, 5 May 2025 14:30:24 -0700 Subject: [PATCH 3/3] API mappings --- snippet-extractor-metadata/powerpoint.xlsx | Bin 14220 -> 14317 bytes snippet-extractor-output/snippets.yaml | 42 +++++++++++++++++++++ 2 files changed, 42 insertions(+) diff --git a/snippet-extractor-metadata/powerpoint.xlsx b/snippet-extractor-metadata/powerpoint.xlsx index 4c6d50cb6874357cbe9580841f63e005de69da1a..27fc4a4a9ee580b67d3263ed756fb452d3cb69b4 100644 GIT binary patch delta 5593 zcmZ8lby(Ehv)?5Jfkj$ELY7!clx5VVY!=eolw1AkA1%0a(al?7RO23~#d+;AvY~o`Xp$8(LguA|^U>4SPw4dJ zxskf)PCtTl-cx@lFIjB*m>E?Dj$|}(4cHd{r2YQLR`aQRwt`$+Pwy_hKkB6^DTz}g zT2;Lo@pyrnStSQ(opO4@SmRfS*!c%Uh1n!$^>tP~!nZt{-(U%~+O1YK z;iK^v?1+njfCK;47WSNqm+?WqaZOIKPT22&Sm712+?#Oy;4D%%iGF%qhZSnSrg+oT zHS{K7f{(x62r;bL|9s6da3m(cyP?RT7U&3=YxqpewsEgaG} z2A0V8^=EfaYX6)Oyvyv+@fG;6WDCU%p7pZI6+CzF;-_n(26qoq`<#DMML@Aqc3f4I zSRzKyVjl)5L2RZ3ko@Ty){-AyiI#?BgQ9c3D#UWTU+@n@8!Ion-Rz)fEf)w5&2 zLBV6PESj*x27w%t&7o-WKxTT4Xo zR50s7DF%0*aUnXcFHJjAcIBPGIN}odZmrx!nO7aZ3`f;^ry}VJi93eR-zSa4l7Sg>N+aW2%bEMZY;x zFGk@@eu##~$=qGhr|3$SksEx5Sa`^{x1p;3t{eLtLes%4rSENo=x>ZiQg&4DO2;o# z-BTZEl)hYIXN5VeK85+d1>{V9Eu}eXE;DQX;?!?x)MqleUi%R!6}vdMQL^P(3n}yu zFHD%#%E|EZ!e1FKvK=^1?oj)3bD(+7T1pdr<~I(lpXMvPpI*d8dV&4!c9n1pMJ3P| zK>}FJwI?mf$3w8?4eg-8WNxvzcs9?u9kRK=@X199?c5Nue2c|Mz{*<;kx^C1S=WT^ zh>l~Dq;MbHkG|$Vx6OL`b_;J(U6xWTM;KbB=g6;a+RL!mH}#8CMJX=bP$ z(sDZG!vPn=b^gpQpihNf+@-Fz-*%w>tI#GU>c_! z&i>!A>gWCPn;!=@_@W&CqB85NiqC0IuJvy$lf8GMG&fv6|Jx>Vj}8JoJb?b$KBxb2 zq?E=FdkZ~AUCq2FidX^%ZS4=wE8y~J+5I2VduR7cBFHf>(#+|COJN<9Gy{=7L z{rtW63Pl^|&w=In&Q4L4o}Rmlfry(KV2$yqszuv-6|YA7qWz(|Pk*2Do{a6MS9&>_ zcN>-?eB7*Ot}WJDk7TNXtbTWW>(&P_+KmZc6a`1o`F=NU1%9C!D_DF{(IOI@(; z#CIM+()Sige^Xu83E9Db!0s?hFDc^h^e5=>LEE)E0RvU-=uss7QRLG#Dq__5y4)h178f^X9iq{R&b4Fupg*y$Np-*w zDJ2P2I$gK8YtXtChu!})2dvd^KP`#!42gm817Mbawst^)Zl_OPmlhC>Bvd3#k;z8ZS+F3PDB_d;PQ(y04x+51ovz16 zuxc|RF_?jhf>@IbzSX>pnlZdr|{up$)40nGLGeBt}UFaQq1){m4k30>QUWsCHn% zcou*HQ;~bgn54&9T#Iu0m+?tSJ72-icy{C-59gHxB9ZzRmuOJdQk^^W>>yvhFACwf zT|hwei;F49mr=0v0U4^5G5aT61s3&Ag%G?gEt4|+JvKr|#}sKzoW)`YaHv?e7cLLs z?e$gLe|%90Xh!~^as2)BQ-(;A)T`nskh`0#qpq6q6X(w~A!C!yNNs}d3eCcKiN~2)IS90#J7mPPV|VUbR>wuPew&BjiJv*Z0JDRAv%H?n{P@t zbP4QF=<`2)#NdD?E9h+Z9eoGGUdXH7w^Xm?o4CUcfQhw1bEq_{O*BY59(i3@Xaiv@ z%GO>Do=`G^t>uw2W?Gk$hw9+GpjKH8uDd<)44z6UOyu`5irlqE^BfI&FJ##?_~G-z!} zN>LtwMzGr8ftPO8*-GN17V7*9Mv_AYmI@Ok9}!5vcBbNK%}c!@K8a|G1!1iCPWt2u^-<_F+xY8rc0Tou%X)D>!1sKL=M<7YePg zQ2;$^pvJ%Ebh;f%O}7W5)RQvSmWSA-y%6IFEJU5IQV{(R#B;6YS-BZ%lA%ORsduS_ zT`3?Qdsv;6gFwUdv-=krSe_pGlg{U>kaOfQjSA8=!QrO@-S%VBPy{f4TSVx5v&olT z`$)$b`4l5U&JN1-s38rHAE$LGrC!4$m>y9U$q<4X)0jy8Xn6c$Of!6~UyDaR=#b3YZF2W%ogoN<&jn>S1=o5S3y=CXC&Uvg4&1B| z_|Ma7qT4yfwejK0!8D3Ktzv~*xR1N&DzxUy@jT`tBs?T8@soIeW>n2+|(=l0NHiw zJfUvMLDz|3HA5{DV%VO9^wUULr`O7?l!CKUg?AJkVI1c62T(h~rGb&H5%2xf_60Ax zHWY`iiBq>%^>86n{nE5y%QRqtHJaDQGGQnUz=E2lQFm<~SjJN;$9BiM7pDGVGka)a zRi2g@7+}yuvl1Kv4pv7r zv$ETVtO$Fo2s1LVEJq4@=L#CoRNF!J+QwB4yTjEqb>kHwYL;w1E2!*$3VTTc$2i6S zQX?si7el)oTSZ}Zg|jAJSOSKDgIVrl4MU%aB8qbt6+*yKILtY;@rtPAGr=?ONDMp< zQa?=T+LT_Ah*yh?g{cW9sa5F$Vi(bhtU}JFkEH}%QCRbv1T@3UBLFS+>&u#6`PN3$ z(XX{1#s|}wN<)2W2?zbaceaOV!NPXy1O+siZqJ3k|0&?(DXST{ zu+46I^UbJsm(-3_y#cA~^%#`4h?= z#+f|n0ebY}e17!=H}ujtu2fUq4#L}~gnKMRCjor0wc%OSOs0rRTz+NgXC9#e7IN`K;(w)gYUH+7}+OvVZ9vi};A!m}bG-m2u9jBpbs zCN|W|7cVvXYy*Q)?K)~NVlUJJ?ghsd!zvS@s(Ec!HF94{G&*o#-VLhz@mZs^RnHRI z*!{Os6BC=_Cz->p&giZt7tV+pc}KC4hB|#Av-^!tEh7V(o$v3I-!m3*S5dcnT1*~| z&57?Fk{yHSxVrK)1-fv;QoO9XK#377jW_OGMuW{B~&Mz3%tpYFDh_iE0Sl+R@F@Y}T$r{}USy;z8aoz!UdKH|C| z3}OTotVzxhlYG288-98oJiKYOij10K3c!f35B2!S{HLLZSGnNH>3Hx#z{ws(S@E*4~O? z!uI|qjlSn}#*{l_1XVZb?exiB#0FCKZIZ`)>>skFEoZEfUU$O;IYJGwht@?>CBO)~;Jy>n;>e%<4}Ih|F(W*Hf>` z-eCA6E4j!1-YSC>M;wa{&tzVHi_(63wwRW!HpgK$fzGl$X}s;x)llBke#^^2#w;fd zVoU%Ty~YLp0_SyLhxZ4NYSw=(c z*(Y$XcMnAxfmZR#hK1Xo*s}{0Uk`MJ5WM!&>Skl$I)-Y5uzVqa5up^ani`&3J0&vf zmRmMahNmSiSr<8L6#QKYAd?|&{PpVELkYEuzboZ>4kB>#$r!i0=838?D4Y-TE5nl? zC8gk8F2Wiq$~EWta@uT*8)=c!)JyK|xlQVvgd@6gK9oEqmLStH@ej;sUzxE(nF%QK z&_AC6lcOXN8zv6lmtV?dmxptQXlH4t9kznWx_!{m<J&DD|gocq>eA%>-e?suwe|n(BZ{f(ax@zhw4}O?2WHskJ zQ?PiWN!_$J!YvOuIrCs&E>)op7c%NFwGV4z4-JSr^a=VsFMCzQ1!-ya)mW3k>rQ{b zYPB~g8xOU=NBtKY5ZFsFy6rsmnQ}cZ3nLg%?V%wGTT#A+;2yAr3Gm7od5AH;vhZ*Ag3+eErxi>EmLY9xVvG zO~d_Z(4Iyckm6Op&Pj@-~r%UU6Jxt{} zfB846hJzh4uaV?DQp}5Gl8{=Pv=aGNG7-`4gW=+os_7cFy$ZA(p`_rsrQf7aQi{Ee zE)lP~j2(PUnQo;N9hW8{fN@Z}sP~=Bw^SlyYGE{sRd{VjJp4FWNT`a0shBf0JT&yw zQkqbv*#7m6b$!N?6Z{-=`e+S^awq8DGf@AwO{F*(>5X#QG7iYzKmFIV&20J@|CxFc zb7`Q_J`RuIBG}~cd2W1)|2s{3Y&HIewBR*d(kN#na3l#a9ETeQ4upn$>BEg+4c zNJztv=Y8LEo^yWl$DBDc_jAuZckXBIoxAIi=uvA#LS!WnTT+EKBVh$BJaR>8Lti&u zhh6B_v5DYi7-=BPOWfW~R--B{JtOG42ePByZUc)C1h(FH7%gx=Tk+Wo==8yMY*&oV zdQFg-eTub2Apgjq+ulk(IP*L2FW|12sQhLo;KE)^;4w0>b5QmfYc!`O&_WLycS|Iz z${p~Utz4pWxsU91!BqmK@3NzdXQkYVr9RI^_*i97_D=^0@;m#g#Eu7xt_Ix`D;TJ( zcwUvl8K0$1aM?_yBU@xV6TBq&rrFBYq23wvL;s}`2k~R1v03BnxIx_~n)zRG4o76{ z99M+BN@`jdnTN)4+Jh$5M?^4LwNZzwJ3CbS{DhZ*)zfM`g zw_iPiXyQf%3c0-P%e*^H=)0Y(t23tSc0lssm3cL0rrQ>GcSkq}P>Ll5ZF3clLt2PGNini-{*=a01_W^b_ICXncNrR0IzjJAFV3x__YbZL6 zpRVCP*+YD?WL&105E%$mtb}$Y=L0@1LUv_ULLmV(uoAj^k185toEO$+q#y|KaZDS)+sgHk8^RL^UhoY#Oj>$EBW@vf$m4Co{k%PH9@J^If5`W)Vv;<$3 z9RZPa1pkyNhvJuG1Np6cVSiF_n-Q)_P7ZL)3_amQr)yykT2l~Cab=tf16s%&xAIij z`fRd^BKD(wqjH!(q#E}#3G>a7I%<>XKQ@d!JIZW1Q@P`MOZV|nql=n$JUz9GwU3YQ z;~%6F?Tb)@5x=BBj-r=hzcG7vRwSigc%3t(5jto(n=x?=!ply@E}cXv?#iM?4mhIX zMqxbfjW=rSh6+3vS-iIwHsYh1vBi4;#=+p1X^a+n- z-nZqb%=~Z<40u>@#btVsZX4rfQV{WuGr_TW=njqL*98!2qjsuhvY_y%+S_oZZcgey zJ0aDjA@vNuy@XVdS}c3XDfj$m79P}Jl4rENc>fWU{lG3-v6sMFXuup`=6N9>aKC%W zq;&PZV;(WXP<+D|;C?_VWss!m#%mEg%c7H|%B!QZmxDvtOp>*X$0Js5odcJUrQE8F z+%o}_k>uq{IT857JV5(%fVfS)D)CiN#9Tn)iWb<4?YUEPYy1T?X;d^pe}uWw>_{9T zo8)x0>0uVu5VNbhO|`d{tLu-OeoQNQZ0E~>WtUdj zBxa8dB_r8qieB?#d}?-pS~GjIfAGwy{3O!oqUzHXuIPjS ztB`tWs==hp{O|_g9j&#l6F7}ByXYP(>Mx~%MMJ~G;-%G5ADl;(158TLV5oYmGGD>r z52Po+k7rkAbdjHOIYU3e@tuFOtB%Gx$ZP-SEbG!7_n=zd2RIU zL-t2PT!ZVwEq$U!?@%@7st*}3(Kq2B-$RF|nD;h6a7wBSj-v113{5U3tT2JM^LK!f z&QHwpv!Vj&E6>hlY;neheAG8qa8^@Un(pF~6*|O&9I15T;W)(C0>L;81BCeA1UsQ$ z`*3Mfh$9vEgV?DycY=sqBrusV+$?4GE+-XC$gqVi^~rrKfmC!8m70 z4)fgRV+>f`(V$s$)G@8RFJ2%Cpu;4Pe>fZ>F!#fETP>jxdIL2H3xddQ&OE}XIip}j z60wVhd?q(nH3ReXMAa*|4`E~#(!$dvd&{{G-@Xc;1EN>F4>bd3X0&S z8Z3sdBw(hmC18ARVM78OPPI(K8I25X_G#sJB5Joe#h)1k($R2pj6> zY6|rYcb|$IynUn@nmu*_3iAFu`eJ-h4IO{yd>*I4clV3aW6(eF>q63Usk&i`d?T8k zJbrv!L!wAU1{1id@&jf>P|mdZ$~y1Mb1f{IZMNa*470pu8C5yF<69GtG)gcIp?e2! zb3J)p1oNJ1=`NfY$S+;SRPaVf>kwih^_(y=o2mRE&EfvZ^czEyie(mxZv*NhhXg!} zVj_r5Uo>{|6rcZv(0z%Kh@WKU)NkuFx8z z15f#kgq_}k=zy(dWi&gbie<5i4!z8bNk{Y!SHCO5i-#A#TKi!_}@oyv~W6RdU1d^$$ zJE{5n#%?9h`?IffMv6Mk_Y&?nDnl|}*1i$I8<(AduOVAUiqSUzQHn$G$yYiBf#lCK zD2>_$FZ1wbHwivBrQZqi65AA(Ki4L!0%SC9NGwl6qU7?Qz$f+h>ned)=wgl-gm9Gb zW;3CGf?ijcEf39RPFj}4{z5XokCUB|RiQEigG;y*Ila@5Dcx6Y`G*cSJb^M@;H-pB z3;#!y4C#Ont#A^`XH+_>%8lt9lTgL5f=eRkTV08H&)7R5dH}VbF`r_kQz&PK9l@gb zi4W3o&Gj`@Dr8#lM#-nh z4_E8UxXDb8txD$(@*1_lJZn(g>~dx2c(hdKdOLn*-U*(TWmIq@nc6j>?M*FFw?IRHMLuut@P>w3z;8{<;Pg^5BHm|~jjRx(+b-QZpXUd=tfC1!SRJy2c3u1I^ za88oPR+P)a>7!H9bm%u9!*QIb55_!|*GyXCE9B0}1SH)kZ71 z@g|R@Kp;-_X&1-D-`df|y(_+AVj*H52HOxH6TR~iy@PRV)&!I9zA%_Kol?ZE3b}Mo znQ4A+4mg;^dO%X7L|po_^Y2p@j-s4t zTzunMUQVzTgFTur+7;`GOj6RxE;>`Uf=KbnqDFI0f~w94-Wyv!o0R^Rc)*J6DJT%K zv3eBo%&zUzLk*JobYAAkc;j9KHapE2u0ObOq{`_*B(=CI1mMcwVs3qde&WU@>mmEz8SN~)`rXK~qH_IV!?(H>#eUnuX}ko{o(z$aHL z=nB^yrOWCmmC4QSv!`R<)0Xe^B96LkGG8ayZ8lwCHC=FoHB*$-j^;P2W1veC?`u$k z+RB3?@2-o#1Ui*yOUr6w^pcCrdU^TE3Z>KZJ(+SSQ@_-nCzCEv@Ep>``^mA6Z_c*n z%D^dHa=l;0b0ea#CBSBPC4%Y;QHN=yliP#Wn)I-4nN13#s+zwsSx?Sm#P{A&RuZW0 zdb8g{0;>9k3NAdTR-CO_U6OeA%MW%rZ;D1ccg@bqW)SLSGLtq3N4iH9ssKM|tP+H^e% z!<5H+z?)1w6Ym~vY@b^zo8QO#pV?dMIz;b{HOjab+nB|Qct5qI!~^3d^(ERD>>0PP z(`M9j>~6p{#ww9PTbrn+B)`AM(-&O6g40WGYKpUVH^U9NkV@6sjKl_5xFK9wPQ-1^ ziwj2^X+JT2m!B8;_}nYbia@8dQ2$tzLahrcx~Z-9cWdCi($5~D+h6%6G;WLhzWAwl z`>*{kGoe=N8u&JZ{NSX~z8%fxs(USrzD6sO&^09Ty~QKUis3FpOF_7Sp5$UF+K!r= z@4wV8`}{P5C02$hoWh`FYr^sUajlx96q^f(XD&wr`U-feEanPXh?!VbVQ+o+y&|ad z+HW>`7rXNUJ5~&^UgYLWU_GyD0^@cZOB{EtHKzjf$+?n(3ZwTDYqxW+2}W-p ztcgab9v6FVoB0jp+gFNi=1%;z!`T}&QKs-q-Q=s2kq*4y#^2y;@+gB4dK^Fz~iO3SpusiCYZ%hD@v=G&Rpr(4}iZFaD zMU+wHcWyB2xRjym&)BR}zc)Y<;1%J7G-~j8ai@+!ZbVeRaVRkOn-QORM!}FvEIoCu&*Pk5l$VG| zRSx17%5suyf{^OrP~2e3>a$zXIoBCXh*+O6tq54$I~poYH1m2a&rUm*abE-av@anq z)&uT<1|pO`Hk2&g8V|GtksDHqX>)ZOXL4!lf8{cVnE{X;WSz(HGsAuM9_Y*?abYIm z(d>xCEV}Mnx_Y(5UK!rzA5%>#t#7fH%>9%&Lmo1sGOa{QH{(4DR^60W#W{NAZ0;^& z5CQ~JkEoE+&oJBqNBRN@_4YLK5$O={I*)5KdWWHzEFPf$^R_9q-^W#RRXx)I7Z

7!%cd?j24rEYP|9Kp!lgGqd8V=b=EQ~(c}ZZC&oepBhbSeHwjq4HNGzh9f2RDcAaS+<1LD0jNbK)3v=tw+8E?4QVpzI-`4d zA$#m*6m1A>8(S_Dw!|oyiplHembw5)TzXw&jhH!nw z@62yS{`&RO@x+*xr1O(^{-&&t(@1r9uMTdv3W>>yT;#AIswJ>DeZXS62KTkBE&=#F z2R5`+4f0%44U9*9f^2-fQrV%y&OW7O#QQ))S?L4vy)HjgW6Skw#J;U{k$;zE|8TFX z56PS^l{hA@;Y2fLCc|BThx+w-QU3z}KfYxYF(dw8-_ajxK*)L1z(FgLF{9U^R4o5? zbU+}+n?mB>VTh&{e}vyikEUjzL%WF!;=$3`;+!o1zw-DOV2vIVhvT#Ip|CTEM0{ZyT9TG5nJV7)d$bx2)q+_$9G(NZN0Og7`r$tk{|Dx0PHX@G diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index de21f375..8920d1d2 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -15808,6 +15808,48 @@ slide.delete(); }); }); +'PowerPoint.Slide#exportAsBase64:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/slide-management/export-import-slide.yaml + + + // Exports current slide. + + await PowerPoint.run(async (context) => { + const slide = context.presentation.getSelectedSlides().getItemAt(0); + const slideBase64DataResult = slide.exportAsBase64(); + const imageBase64DataResult = slide.getImageAsBase64({ height: 300 }); + await context.sync(); + + localStorage.setItem("exportedSlide", slideBase64DataResult.value); + localStorage.setItem("exportedSlideImage", imageBase64DataResult.value); + + updateSlideImage(imageBase64DataResult.value); + + console.log("Slide was exported."); + }); +'PowerPoint.Slide#getImageAsBase64:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/slide-management/export-import-slide.yaml + + + // Exports current slide. + + await PowerPoint.run(async (context) => { + const slide = context.presentation.getSelectedSlides().getItemAt(0); + const slideBase64DataResult = slide.exportAsBase64(); + const imageBase64DataResult = slide.getImageAsBase64({ height: 300 }); + await context.sync(); + + localStorage.setItem("exportedSlide", slideBase64DataResult.value); + localStorage.setItem("exportedSlideImage", imageBase64DataResult.value); + + updateSlideImage(imageBase64DataResult.value); + + console.log("Slide was exported."); + }); 'PowerPoint.Slide#setSelectedShapes:member(1)': - >- // Link to full sample: