БЕТА-версия API JavaScript MS PowerPoint — Как я могу вставить новый слайд с помощью insertSlidesFromBase64 (base64File, параметры)?

#javascript #powerpoint #office-js #slide #beta

#javascript #powerpoint #office-js #слайд #бета

Вопрос:

Я экспериментирую с API-интерфейсами JavaScript в бета-версии / предварительном просмотре для надстройки MS PowerPoint. Чего я хочу добиться, так это вставить новый слайд из файла .pttx с кодировкой base64 в текущий документ.

Я ожидаю, что это возможно с помощью метода insertSlidesFromBase64(base64File, options), который задокументирован здесь: PowerPoint API doc

Я включил https://appsforoffice.microsoft.com/lib/beta/hosted/office.js в надстройке

Я работаю над Mac OS 10.15.7

Я обновил PowerPoint до последней версии в бета-канале. Версия PowerPoint 16.44 (20111100).

Теперь я не совсем уверен, действительно ли бета-методы API доступны в моей среде. Большая проблема, с которой я сталкиваюсь, заключается в том, что я не знаю, для какого объекта я могу вызвать этот метод. Я думаю, что метод должен быть доступен где-то в контексте текущего документа / презентации ?!?

Я думаю, что очень простой пример того, как я могу вставить «base64EncodedPptx» с insertSlidesFromBase64("base64EncodedPptx") помощью, решил бы проблему.

Ответ №1:

Ваша версия PowerPoint для Mac должна иметь реализацию этого API.

С точки зрения очень простого использования, вот несколько фрагментов кода:

     await PowerPoint.run(async function(context) {
      context.presentation.insertSlidesFromBase64( base64EncodedPptxFileAsString );
      context.sync();
    });

    await PowerPoint.run(async function (context) {
      context.presentation.insertSlidesFromBase64( base64EncodedPptxFileAsString,
        {
          formatting: "UseDestinationTheme",
          targetSlideId: "257#",
          sourceSlideIds: ["257#3396654126", "258#"]
        });
      context.sync();
    });
  

Со стороны javascript вы можете использовать средство выбора файлов, например, для получения строки base64:
Если у вас есть это в HTML

     <form>
        <input type="file" id="file" />
    </form>
  

и это в скрипте:

 $("#file").change(() => tryCatch(useInsertSlidesApi));

async function useInsertSlidesApi() {
  const myFile = <HTMLInputElement>document.getElementById("file");
  const reader = new FileReader();

  reader.onload = async (event) => {
    // strip off the metadata before the base64-encoded string
    const startIndex = reader.result.toString().indexOf("base64,");
    const copyBase64 = reader.result.toString().substr(startIndex   7);

    await PowerPoint.run(async function(context) {
      context.presentation.insertSlidesFromBase64(copyBase64);
      context.sync();
    });
  };

  // read in the file as a data URL so we can parse the base64-encoded string
  reader.readAsDataURL(myFile.files[0]);
}

/** Default helper for invoking an action and handling errors. */
async function tryCatch(callback) {
  try {
    await callback();
  } catch (error) {
    // Note: In a production add-in, you'd want to notify the user through your add-in's UI.
    console.error(error);
  }
}
  

Комментарии:

1. Теперь для этого есть официальная документация: вставка и удаление слайдов в презентации PowerPoint .

2. Спасибо @RickKirkham, как официальная документация, так и этот ответ решают проблему.