Trabalhar com formas usando a API JavaScript do PowerPoint

Este artigo descreve como usar formas geométricas, linhas e caixas de texto em conjunto com as APIs Shape e ShapeCollection .

Criar formas

As formas são criadas por meio e armazenadas na coleção de formas de um slide (slide.shapes). ShapeCollection tem vários .add* métodos para essa finalidade. Todas as formas têm nomes e IDs gerados para elas quando são adicionadas à coleção. Estas são as name propriedades e id , respectivamente. name pode ser definido pelo seu suplemento.

Formas geométricas

Uma forma geométrica é criada com uma das sobrecargas de ShapeCollection.addGeometricShape. O primeiro parâmetro é um enumeração GeometricShapeType ou a cadeia de caracteres equivalente a um dos valores do enum. Há um segundo parâmetro opcional do tipo ShapeAddOptions que pode especificar o tamanho inicial da forma e sua posição em relação aos lados superior e esquerdo do slide, medidos em pontos. Ou essas propriedades podem ser definidas após a criação da forma.

O exemplo de código a seguir cria um retângulo chamado "Square" posicionado a 100 pontos dos lados superior e esquerdo do slide. O método retorna um Shape objeto.

// This sample creates a rectangle positioned 100 points from the top and left sides
// of the slide and is 150x150 points. The shape is put on the first slide.
await PowerPoint.run(async (context) => {
    const shapes = context.presentation.slides.getItemAt(0).shapes;
    const rectangle = shapes.addGeometricShape(PowerPoint.GeometricShapeType.rectangle);
    rectangle.left = 100;
    rectangle.top = 100;
    rectangle.height = 150;
    rectangle.width = 150;
    rectangle.name = "Square";
    await context.sync();
});

Linhas

Uma linha é criada com uma das sobrecargas de ShapeCollection.addLine. O primeiro parâmetro é um enumeração ConnectorType ou a cadeia de caracteres equivalente a um dos valores do enum para especificar como a linha se contorta entre pontos de extremidade. Há um segundo parâmetro opcional do tipo ShapeAddOptions que pode especificar os pontos de início e de extremidade da linha. Ou essas propriedades podem ser definidas após a criação da forma. O método retorna um Shape objeto.

Observação

Quando a forma é uma linha, as top propriedades e left dos Shape objetos e ShapeAddOptions especificam o ponto de partida da linha em relação às bordas superior e esquerda do slide. As height propriedades e width especificam o ponto de extremidade da linha em relação ao ponto de partida. Portanto, o ponto de extremidade relativo às bordas superior e esquerda do slide é (top + height) por ().left + width A unidade de medida para todas as propriedades é de pontos e valores negativos são permitidos.

O exemplo de código a seguir cria uma linha reta no slide.

// This sample creates a straight line on the first slide.
await PowerPoint.run(async (context) => {
    const shapes = context.presentation.slides.getItemAt(0).shapes;
    const line = shapes.addLine(PowerPoint.ConnectorType.straight, {left: 200, top: 50, height: 300, width: 150});
    line.name = "StraightLine";
    await context.sync();
});

Caixas de texto

Uma caixa de texto é criada com o método addTextBox . O primeiro parâmetro é o texto que deve aparecer na caixa inicialmente. Há um segundo parâmetro opcional do tipo ShapeAddOptions que pode especificar o tamanho inicial da caixa de texto e sua posição em relação aos lados superior e esquerdo do slide. Ou essas propriedades podem ser definidas após a criação da forma.

O exemplo de código a seguir mostra como criar uma caixa de texto no primeiro slide.

// This sample creates a text box with the text "Hello!" and sizes it appropriately.
await PowerPoint.run(async (context) => {
    const shapes = context.presentation.slides.getItemAt(0).shapes;
    const textbox = shapes.addTextBox("Hello!");
    textbox.left = 100;
    textbox.top = 100;
    textbox.height = 300;
    textbox.width = 450;
    textbox.name = "Textbox";
    await context.sync();
});

Mover e redimensionar formas

As formas ficam em cima do slide. O posicionamento deles é definido pelas left propriedades e top . Elas atuam como margens das respectivas bordas do slide, medidas em pontos, com left: 0 e top: 0 sendo o canto superior esquerdo. O tamanho da height forma é especificado pelas propriedades e width . Seu código pode mover ou redimensionar a forma redefinindo essas propriedades. (Essas propriedades têm um significado ligeiramente diferente quando a forma é uma linha. Consulte Linhas.)

Texto em formas

Formas geométricas podem conter texto. As formas têm uma textFrame propriedade do tipo TextFrame. O TextFrame objeto gerencia as opções de exibição de texto (como margens e estouro de texto). TextFrame.textRange é um objeto TextRange com o conteúdo de texto e as configurações de fonte.

O exemplo de código a seguir cria uma forma geométrica chamada "Braces" com o texto "Texto de forma". Ele também ajusta a forma e as cores de texto, bem como define o alinhamento vertical do texto para o centro.

// This sample creates a light blue rectangle with braces ("{}") on the left and right ends
// and adds the purple text "Shape text" to the center.
await PowerPoint.run(async (context) => {
    const shapes = context.presentation.slides.getItemAt(0).shapes;
    const braces = shapes.addGeometricShape(PowerPoint.GeometricShapeType.bracePair);
    braces.left = 100;
    braces.top = 400;
    braces.height = 50;
    braces.width = 150;
    braces.name = "Braces";
    braces.fill.setSolidColor("lightblue");
    braces.textFrame.textRange.text = "Shape text";
    braces.textFrame.textRange.font.color = "purple";
    braces.textFrame.verticalAlignment = PowerPoint.TextVerticalAlignment.middleCentered;
    await context.sync();
});

Excluir formas

As formas são removidas do slide com o Shape método do delete objeto.

O exemplo de código a seguir mostra como excluir formas.

await PowerPoint.run(async (context) => {
    // Delete all shapes from the first slide.
    const sheet = context.presentation.slides.getItemAt(0);
    const shapes = sheet.shapes;

    // Load all the shapes in the collection without loading their properties.
    shapes.load("items/$none");
    await context.sync();
        
    shapes.items.forEach(function (shape) {
        shape.delete();
    });
    await context.sync();
});