使用Office JS获取PowerPoint幻灯片字体:前置字体设置读取失败问题
PowerPoint Web任务窗格获取前置设置字体问题解决
你的问题出在:当通过「开始」选项卡先设置字体再输入文字时,字体属性实际存储在文本框的默认段落格式中,而非直接在textRange.font上——只有选中已有文字修改字体时,textRange.font才会被显式赋值,否则它会继承默认格式,导致读取到空值。
解决方法
需要同时加载文本框的默认段落字体属性,当textRange.font.name为空时,使用默认格式的字体作为 fallback:
修改后的完整代码
async function validateSlideDeck() { await PowerPoint.run(async (context) => { const slides = context.presentation.slides; slides.load("items"); await context.sync(); for (let slide of slides.items) { slide.shapes.load("items"); await context.sync(); for (let shape of slide.shapes.items) { if (shape.textFrame) { // 同时加载文本范围的font、text,以及文本框的默认段落字体 shape.textFrame.textRange.load(["text", "font"]); shape.textFrame.load("defaultParagraphFormat/font"); await context.sync(); if (shape.textFrame.textRange.text && shape.textFrame.textRange.text.length > 0) { // 优先取textRange的字体,为空则用默认段落字体 const fontName = shape.textFrame.textRange.font.name || shape.textFrame.defaultParagraphFormat.font.name; console.log(fontName); } } } } }).catch(error => { console.error(error); }); }
关键说明
shape.textFrame.defaultParagraphFormat.font存储的是文本框的默认字体设置,也就是你通过「开始」选项卡预先设置的字体。- 优化了
load操作,将多个属性合并加载,减少context.sync的调用次数,提升代码运行效率。
内容的提问来源于stack exchange,提问作者akaparadox
相关产品推荐
相关产品推荐

