С помощью python-pptx я могу изменить размер текста в соответствии с размером форму, а не наоборот. Невозможно определить размер содержимого текстового поля, только исходный размер фигуры (до заполнения).
С помощью простого макроса в VBA я могу исправить размер всех фигур в Frame в зависимости от размера их текстового содержимого, и его запуск с помощью Python возможен с помощью win32com.client. Однако это решение работает только на компьютере с установленным Powerpoint и, следовательно, не может работать в стандартном серверном интерфейсе веб-приложения Azure, как мне нужно здесь.
Есть ли способ:
- Запустите макрос из файла .pptm и сохраните его после выполнения макроса.
- Измените размер всех текстовых полей на слайде на основе их текстового содержимого и сохранения результата. В качестве быстрой точности изменение размеров одного текстового поля, по-видимому, обновляет все остальные текстовые поля так, чтобы их текст соответствовал размеру их фигур, что означает уменьшение размера текста, чего я не хочу. Однако сначала сохранение их размеров, а затем изменение размера во второй раз работает.
Похоже, что макросы не поддерживаются в Office365 или Sharepoint, а OfficeScript ограничен для Powerpoint. Я не хочу запускать виртуальную машину только для этой задачи, если это возможно.
Текущий сценарий VBA:
Код: Выделить всё
Sub ResizeTextBoxesWithMission()
Dim slide As slide
Dim shape As shape
Dim textHeight As Double
Dim textBoxHeight As Double
Dim textBoxSizes As Collection
Set textBoxSizes = New Collection
' First loop: Calculate text box sizes without resizing
For Each slide In ActivePresentation.Slides
For Each shape In slide.Shapes
If shape.HasTextFrame Then
If Len(shape.TextFrame.TextRange.Text) > 0 Then
' Check if the name of the shape contains "Mission"
' Get the text height for this text box
textHeight = shape.TextFrame.TextRange.BoundHeight
textBoxHeight = textHeight + 10 ' Add some padding
' Store the shape's name and calculated height in the collection
textBoxSizes.Add Array(shape.Name, textBoxHeight)
End If
End If
Next shape
Next slide
' Second loop: Apply the calculated sizes
For Each slide In ActivePresentation.Slides
For Each shape In slide.Shapes
If shape.HasTextFrame Then
' Loop through the stored sizes
Dim i As Long
For i = 1 To textBoxSizes.Count
Dim item As Variant
item = textBoxSizes(i)
' Check if the current shape matches the stored name
If shape.Name = item(0) Then
' Apply the calculated height
shape.Height = item(1)
End If
Next i
End If
Next shape
Next slide
End Sub
Подробнее здесь: https://stackoverflow.com/questions/789 ... rom-python