Inserir slides em uma apresentação do PowerPoint
Um suplemento do PowerPoint pode inserir slides de uma apresentação na apresentação atual usando a biblioteca JavaScript específica do aplicativo do PowerPoint. Você pode controlar se os slides inseridos mantêm a formatação da apresentação de origem ou a formatação da apresentação de destino.
As APIs de inserção de slides são usadas principalmente em cenários de modelo de apresentação: há um pequeno número de apresentações conhecidas que servem como pools de slides que podem ser inseridos pelo suplemento. Nesse cenário, você ou o cliente devem criar e manter uma fonte de dados que correlaciona o critério de seleção (como títulos de slide ou imagens) com IDs de slide. As APIs também podem ser usadas em cenários em que o usuário pode inserir slides de qualquer apresentação arbitrária, mas nesse cenário o usuário está efetivamente limitado a inserir todos os slides da apresentação de origem. Consulte Selecionar quais slides inserir para obter mais informações sobre isso.
Há duas etapas para inserir slides de uma apresentação em outra.
- Converta o arquivo de apresentação de origem (.pptx) em uma cadeia de caracteres formatada com base64.
- Use o
insertSlidesFromBase64
método para inserir um ou mais slides do arquivo base64 na apresentação atual.
Converter a apresentação de origem em base64
Há muitas maneiras de converter um arquivo em base64. Qual linguagem de programação e biblioteca você usa e se a conversão no lado do servidor do suplemento ou do lado do cliente é determinada pelo seu cenário. Mais comumente, você fará a conversão em JavaScript no lado do cliente usando um objeto FileReader . O exemplo a seguir mostra essa prática.
Comece obtendo uma referência ao arquivo powerpoint de origem. Neste exemplo, usaremos um
<input>
controle do tipofile
para solicitar que o usuário escolha um arquivo. Adicione a marcação a seguir à página de suplemento.<section> <p>Select a PowerPoint presentation from which to insert slides</p> <form> <input type="file" id="file" /> </form> </section>
Essa marcação adiciona a interface do usuário na captura de tela a seguir à página.
Observação
Há muitas outras maneiras de obter um arquivo do PowerPoint. Por exemplo, se o arquivo estiver armazenado no OneDrive ou no SharePoint, você poderá usar o Microsoft Graph para baixá-lo. Para obter mais informações, consulte Trabalhar com arquivos no Microsoft Graph e nos Arquivos de Acesso com o Microsoft Graph.
Adicione o código a seguir ao JavaScript do suplemento para atribuir uma função ao evento do controle de
change
entrada. (Você cria astoreFileAsBase64
função na próxima etapa.)$("#file").on("change", storeFileAsBase64);
Adicione o código a seguir. Observe o seguinte sobre este código.
- O
reader.readAsDataURL
método converte o arquivo em base64 e o armazena nareader.result
propriedade. Quando o método é concluído, ele dispara oonload
manipulador de eventos. - O
onload
manipulador de eventos corta metadados do arquivo codificado e armazena a cadeia de caracteres codificada em uma variável global. - A cadeia de caracteres codificada base64 é armazenada globalmente porque será lida por outra função que você criará em uma etapa posterior.
let chosenFileBase64; async function storeFileAsBase64() { const reader = new FileReader(); reader.onload = async (event) => { const startIndex = reader.result.toString().indexOf("base64,"); const copyBase64 = reader.result.toString().substr(startIndex + 7); chosenFileBase64 = copyBase64; }; const myFile = document.getElementById("file") as HTMLInputElement; reader.readAsDataURL(myFile.files[0]); }
- O
Inserir slides com insertSlidesFromBase64
Seu suplemento insere slides de outra apresentação do PowerPoint na apresentação atual com o método Presentation.insertSlidesFromBase64 . Veja a seguir um exemplo simples no qual todos os slides da apresentação de origem são inseridos no início da apresentação atual e os slides inseridos mantêm a formatação do arquivo de origem. Observe que chosenFileBase64
é uma variável global que contém uma versão codificada base64 de um arquivo de apresentação do PowerPoint.
async function insertAllSlides() {
await PowerPoint.run(async function(context) {
context.presentation.insertSlidesFromBase64(chosenFileBase64);
await context.sync();
});
}
Você pode controlar alguns aspectos do resultado da inserção, incluindo onde os slides são inseridos e se eles obtêm a formatação de origem ou de destino , passando um objeto InsertSlideOptions como um segundo parâmetro para insertSlidesFromBase64
. Apresentamos um exemplo a seguir. Sobre este código, observe:
- Há dois valores possíveis para a
formatting
propriedade: "UseDestinationTheme" e "KeepSourceFormatting". Opcionalmente, você pode usar oInsertSlideFormatting
enum, (por exemplo, ).PowerPoint.InsertSlideFormatting.useDestinationTheme
- A função inserirá os slides da apresentação de origem imediatamente após o slide especificado pela
targetSlideId
propriedade. O valor dessa propriedade é uma cadeia de caracteres de uma das três formas possíveis: nnn#, #mmmmmmmmm ou nnn#mmmmmmm, em que nnn é a ID do slide (normalmente 3 dígitos) e mmmmmmmmmmm é a ID de criação do slide (normalmente 9 dígitos). Alguns exemplos são267#763315295
,267#
e#763315295
.
async function insertSlidesDestinationFormatting() {
await PowerPoint.run(async function(context) {
context.presentation
.insertSlidesFromBase64(chosenFileBase64,
{
formatting: "UseDestinationTheme",
targetSlideId: "267#"
}
);
await context.sync();
});
}
É claro que normalmente você não saberá no momento da codificação a ID ou a ID de criação do slide de destino. Mais comumente, um suplemento pedirá aos usuários que selecionem o slide de destino. As etapas a seguir mostram como obter a ID nnn# do slide selecionado no momento e usá-la como o slide de destino.
Crie uma função que obtenha a ID do slide selecionado no momento usando o método Office.context.document.getSelectedDataAsync das APIs JavaScript Comuns. Apresentamos um exemplo a seguir. Observe que a chamada para
getSelectedDataAsync
está inserida em uma função de retorno de promessa. Para obter mais informações sobre por que e como fazer isso, consulte Wrap Common-APIs em funções de retorno de promessa.function getSelectedSlideID() { return new OfficeExtension.Promise<string>(function (resolve, reject) { Office.context.document.getSelectedDataAsync(Office.CoercionType.SlideRange, function (asyncResult) { try { if (asyncResult.status === Office.AsyncResultStatus.Failed) { reject(console.error(asyncResult.error.message)); } else { resolve(asyncResult.value.slides[0].id); } } catch (error) { reject(console.log(error)); } }); }) }
Chame sua nova função dentro do PowerPoint.run() da função main e passe a ID que ela retorna (concatenada com o símbolo "#") como o valor da
targetSlideId
propriedade doInsertSlideOptions
parâmetro. Apresentamos um exemplo a seguir.async function insertAfterSelectedSlide() { await PowerPoint.run(async function(context) { const selectedSlideID = await getSelectedSlideID(); context.presentation.insertSlidesFromBase64(chosenFileBase64, { formatting: "UseDestinationTheme", targetSlideId: selectedSlideID + "#" }); await context.sync(); }); }
Selecionando quais slides inserir
Você também pode usar o parâmetro InsertSlideOptions para controlar quais slides da apresentação de origem são inseridos. Você faz isso atribuindo uma matriz de IDs de slide da apresentação de origem à sourceSlideIds
propriedade. A seguir está um exemplo que insere quatro slides. Observe que cada cadeia de caracteres na matriz deve seguir um ou outro dos padrões usados para a targetSlideId
propriedade.
async function insertAfterSelectedSlide() {
await PowerPoint.run(async function(context) {
const selectedSlideID = await getSelectedSlideID();
context.presentation.insertSlidesFromBase64(chosenFileBase64, {
formatting: "UseDestinationTheme",
targetSlideId: selectedSlideID + "#",
sourceSlideIds: ["267#763315295", "256#", "#926310875", "1270#"]
});
await context.sync();
});
}
Observação
Os slides serão inseridos na mesma ordem relativa na qual aparecem na apresentação de origem, independentemente da ordem em que aparecem na matriz.
Não há nenhuma maneira prática de que os usuários possam descobrir a ID ou a ID de criação de um slide na apresentação de origem. Por esse motivo, você só pode usar a sourceSlideIds
propriedade quando souber que as IDs de origem na hora da codificação ou seu suplemento podem recuperá-las em tempo de execução de alguma fonte de dados. Como os usuários não podem ser esperados para memorizar IDs de slide, você também precisa de uma maneira de permitir que o usuário selecione slides, talvez por título ou por uma imagem, e correlacionar cada título ou imagem com a ID do slide.
Assim, a sourceSlideIds
propriedade é usada principalmente em cenários de modelo de apresentação: o suplemento foi projetado para funcionar com um conjunto específico de apresentações que servem como pools de slides que podem ser inseridos. Nesse cenário, você ou o cliente devem criar e manter uma fonte de dados que correlaciona um critério de seleção (como títulos ou imagens) com IDs de slide ou IDs de criação de slides que foram construídas a partir do conjunto de possíveis apresentações de origem.