#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, как официальная документация, так и этот ответ решают проблему.