Работа с фигурами с помощью API JavaScript для PowerPoint

В этой статье описывается использование геометрических фигур, линий и текстовых полей в сочетании с API Shape и ShapeCollection .

Создание фигур

Фигуры создаются и хранятся в коллекции фигур слайда (slide.shapes). ShapeCollection имеет несколько .add* методов для этой цели. Все фигуры имеют имена и идентификаторы, созданные для них при добавлении в коллекцию. name Это свойства и id соответственно. name может быть задана надстройкой.

Геометрические фигуры

Геометрическая фигура создается с одной из перегрузок ShapeCollection.addGeometricShape. Первый параметр является перечислением GeometryShapeType или строковым эквивалентом одного из значений перечисления. Существует необязательный второй параметр типа ShapeAddOptions , который может указывать начальный размер фигуры и ее положение относительно верхней и левой сторон слайда, измеряемого в точках. Кроме того, эти свойства можно задать после создания фигуры.

В следующем примере кода создается прямоугольник с именем Square , расположенный в 100 точках сверху и слева от слайда. Метод возвращает Shape объект .

// 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();
});

Lines

Строка создается с одной из перегрузок ShapeCollection.addLine. Первый параметр является перечислением ConnectorType или строковым эквивалентом одного из значений перечисления, чтобы указать, как линия перевертывается между конечными точками. Существует необязательный второй параметр типа ShapeAddOptions , который может указывать начальную и конечную точки строки. Кроме того, эти свойства можно задать после создания фигуры. Метод возвращает Shape объект .

Примечание.

Если фигура является линией, top свойства Shape и left объектов и ShapeAddOptions указывают начальную точку линии относительно верхнего и левого краев слайда. Свойства height и width указывают конечную точку строки относительно начальной точки. Таким образом, конечная точка относительно верхнего и левого краев слайда имеет значение (top + height) на (left + width). Единица измерения для всех свойств — точек, а отрицательные значения допускаются.

В следующем примере кода создается прямая линия на слайде.

// 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();
});

Надписи

Текстовое поле создается с помощью метода addTextBox . Первый параметр — это текст, который должен появиться в поле. Существует необязательный второй параметр типа ShapeAddOptions , который может указать начальный размер текстового поля и его положение относительно верхней и левой сторон слайда. Кроме того, эти свойства можно задать после создания фигуры.

В следующем примере кода показано, как создать текстовое поле на первом слайде.

// 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();
});

Перемещение и изменение размера фигур

Фигуры располагаются поверх слайда. Их размещение определяется свойствами left и top . Они выступают в качестве полей от соответствующих краев слайда, измеряемых в точках, с left: 0 и top: 0 является левым верхним углом. Размер фигуры определяется свойствами height и width . Код может перемещать или изменять размер фигуры путем сброса этих свойств. (Эти свойства имеют немного другое значение, если фигура является линией. См. раздел Строки.)

Текст в фигурах

Геометрические фигуры могут содержать текст. Фигуры имеют textFrame свойство типа TextFrame. Объект TextFrame управляет параметрами отображения текста (например, полями и переполнением текста). TextFrame.textRange — это объект TextRange с текстовым содержимым и параметрами шрифта.

В следующем примере кода создается геометрическая фигура с именем "Фигурные скобки" с текстом "Текст фигуры". Он также настраивает фигуру и цвета текста, а также задает вертикальное выравнивание текста по центру.

// 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();
});

Удаление фигур

Фигуры удаляются из слайда Shape с помощью метода объекта delete .

В следующем примере кода показано, как удалить фигуры.

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();
});