我正在努力为 microsoft PowerPoint web 创建任务窗格集成,并且我正在尝试获取每张幻灯片的字体。这是我正在使用的代码
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) {
// Check if the shape has a text frame
if (shape.textFrame) {
shape.textFrame.textRange.load("text");
shape.textFrame.textRange.load("font"); // Load font properties to validate
await context.sync();
// Ensure there is actual text in the text range
if (shape.textFrame.textRange.text && shape.textFrame.textRange.text.length > 0) {
const font = shape.textFrame.textRange.font;
console.log(font.name);
}
}
}
代码工作正常,每当我选择文本并在写入后更改字体时,它都会返回正确的字体。但每当我通过“主页”选项卡更改字体然后写入任何文本时,它都会返回空值。
有什么方法可以在通过“主页”选项卡应用字体时获取字体的值,而不是选择文本并在之后更改它?
谢谢
我似乎无法完全按照您所说的方式复制它,但是当形状包含不同字体的文本时,我能够在
font.name
上获得空字符串,并且在选择形状时字体选择器为空
如果您遇到这种情况,一个非常老套的解决方法是使用 getSubstring() 函数仅获取文本的第一个字母并尝试再次获取字体
const firstLetterTextRange = shape.textFrame.textRange.getSubstring(0,1);
firstLetterTextRange.load("font");
await context.sync();
console.log(firstLetterTextRange.font.name);
完整更新代码:
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) {
// Check if the shape has a text frame
if (shape.textFrame) {
shape.textFrame.textRange.load("text");
shape.textFrame.textRange.load("font"); // Load font properties to validate
await context.sync();
// Ensure there is actual text in the text range
if (
shape.textFrame.textRange.text &&
shape.textFrame.textRange.text.length > 0
) {
const firstLetterTextRange = shape.textFrame.textRange.getSubstring(
0,
1
);
firstLetterTextRange.load("font");
await context.sync();
console.log(firstLetterTextRange.font.name);
}
}
}
}
});