如何遍历Word JavaScript API中的枚举以获取Word内置样式?
Word JS 枚举的工作机制说明
Word JavaScript API 中Word.Style这类枚举不属于普通JavaScript可枚举对象,它是Office运行时注入的代理对象,枚举项不会作为对象自有可枚举属性暴露,因此Object.keys()、Object.values()、数组式索引访问这类常规对象遍历方法全部无效,这是API本身的设计特性,不属于调用写法错误。
所有Office命名空间下的枚举(Word/Excel/PowerPoint等)都遵循这个机制,本身不支持直接遍历读取全量枚举项。
可行获取方案
根据实际需求选择对应方案即可:
- 需要获取文档内真实可用的内置样式列表(推荐)
不需要访问Word.Style枚举对象,直接读取文档的样式集合筛选内置样式即可,拿到的结果适配当前Word的语言环境,和用户在Word样式面板看到的内容完全一致,代码示例:await Word.run(async (context) => { const allStyles = context.document.styles; // 加载样式必要属性:是否内置、本地名称、样式类型 allStyles.load("items/builtin, items/nameLocal, items/type"); await context.sync(); // 过滤得到所有内置样式 const builtInStyles = allStyles.items.filter(style => style.builtin); // 输出内置样式的本地名称列表 console.log(builtInStyles.map(style => style.nameLocal)); }); - 仅需要在业务逻辑中使用Style枚举做判断
直接通过Word.Style.枚举值名的形式调用即可,代码编辑器的智能提示会自动列出所有可用枚举项,不需要提前遍历拿到全量值,示例:await Word.run(async (context) => { const paragraph = context.document.getSelection().paragraphs.getFirst(); paragraph.load("styleBuiltIn"); await context.sync(); // 直接调用枚举值做判断,无需提前遍历枚举对象 if (paragraph.styleBuiltIn === Word.Style.heading1) { console.log("当前段落是标题1样式"); } });
注意:不要尝试用原生JS对象遍历方法读取任何Office JS枚举对象,这类代理对象的属性访问逻辑和普通JS对象不一致,遍历操作不会返回预期结果。
内容的提问来源于stack exchange,提问作者August Guenther
相关产品推荐
相关产品推荐

