基于Office JS的PowerPoint插件如何获取当前选中的形状
PowerPoint JS插件获取当前选中形状的解决方案
可以直接使用Office.js专为PowerPoint提供的getSelectedShapes()API实现需求,该API属于PowerPointApi 1.5及以上要求集,不需要依赖getSelectedDataAsync()方法。
实现步骤
- 首先在插件的manifest文件中确认已声明支持PowerPointApi 1.5及以上版本的要求集,避免API调用报错。
- 参考以下示例代码调用API:
async function getCurrentSelectedShape() { await PowerPoint.run(async (context) => { // 获取当前选中的所有形状集合 const selectedShapes = context.presentation.getSelectedShapes(); // 加载形状的必要属性,可根据业务需求扩展需要加载的字段 selectedShapes.load("items/id, items/name, items/type"); await context.sync(); if (selectedShapes.items.length === 0) { console.log("当前未选中任何形状"); return; } // 集合最后一项即为用户最后选中的形状,也就是按DEL键会被删除的目标形状 const targetShape = selectedShapes.items.at(-1); console.log("当前激活的选中形状信息:", { id: targetShape.id, 名称: targetShape.name, 类型: targetShape.type }); // 拿到目标形状后可直接进行后续操作,例如修改填充色 // targetShape.fill.setSolidColor("#2563eb"); // await context.sync(); }); }
兼容低版本要求集的替代方案
如果你的插件需要兼容PowerPointApi 1.5以下的运行环境,可以使用旧版通用API实现:
- 调用
Office.context.document.getSelectedDataAsync(Office.CoercionType.Text),当选中目标为形状时,返回结果中会包含选中形状的ID列表 - 拿到ID后遍历当前幻灯片的所有形状,匹配ID即可找到目标形状
该方案兼容性更强,但代码复杂度更高,能获取的形状初始信息更少,优先推荐使用新API。
内容的提问来源于stack exchange,提问作者Jack Miller
相关产品推荐
相关产品推荐

