使用Office JS获取powerpoint幻灯片的字体

问题描述 投票:0回答:1

我正在努力为 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);
                }
            }
        }

代码工作正常,每当我选择文本并在写入后更改字体时,它都会返回正确的字体。但每当我通过“主页”选项卡更改字体然后写入任何文本时,它都会返回空值。

有什么方法可以在通过“主页”选项卡应用字体时获取字体的值,而不是选择文本并在之后更改它?

谢谢

javascript office-js powerpoint-addins
1个回答
0
投票

我似乎无法完全按照您所说的方式复制它,但是当形状包含不同字体的文本时,我能够在

font.name
上获得空字符串,并且在选择形状时字体选择器为空 powerpoint text box with empty font selector

如果您遇到这种情况,一个非常老套的解决方法是使用 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);
        }
      }
    }
  }
});
© www.soinside.com 2019 - 2024. All rights reserved.