Python pptx - редактирование электронной таблицы Excel (не требуется связанная таблица или внешняя рабочая книга) - PullRequest
0 голосов
/ 19 декабря 2018

В PowerPoint я вставил таблицу электронных таблиц Excel , но «таблица» только выглядит как графический кадр без типа фигуры и возвращает false, когда я проверяю таблицу или диаграмму:

from pptx import Presentation
prs = Presentation('../Template.pptx')
slide = prs.slides[7]
table = slide.shapes[6]
print(table)
>>><pptx.shapes.graphfrm.GraphicFrame object at 0x063BDEB0>
print(table.shape_type)
>>>None
print(table.has_table)
>>>False
print(table.has_chart)
>>>False

Любая подсказка, как я могу на самом деле редактировать данные внутри моей табличной переменной?

Чтобы воссоздать эту проблему, создайте слайд и добавьте таблицу через ленту Вставка> Таблица> Электронная таблица Excel.Затем вы можете изменить мой сценарий выше, чтобы он вызывал правильную презентацию / слайд / форму.


Я добавлю это, когда создаю таблицу через Вставка> Таблица> Вставить таблицу ... или используйте table = slide.shapes.add_table(3,3,x,y,cx,cy)тогда table.has_table верно.Но если таблица создается таким образом, я не могу использовать ключевые функции Excel, такие как типы данных и условное форматирование.На изображении ниже видно, что таблица, отформатированная с использованием валюты и условного форматирования, гораздо удобнее для чтения, чем таблица без.

table comparison screenshot

1 Ответ

0 голосов
/ 19 декабря 2018

Встроенная «таблица» Excel - это не то же самое, что форма таблицы PowerPoint.

Краткий ответ: API не поддерживает редактирование встроенного диапазона Excel в python-pptx.

Существует пять типов фигур в PowerPoint: автофигура (обычный квадрат, круг и т. Д.), Соединитель (линии), изображение, групповая форма и графическая рамка.Графический фрейм - это «контейнер» для неформального типа PowerPoint, такого как диаграмма, таблица, smart-art и встроенный объект Office (в данном случае диапазон Excel).

Так что тот факт, чтотип фигуры, о котором сообщается, GraphicFrame только сужает его, и в этом случае недостаточно, чтобы различать таблицу и встроенный диапазон Excel.

Свойство GraphicFrame.has_table добросовестно выполняет свою работу в отчетностичто графический фрейм не содержит таблицы DrawingML, хотя вещь, которую она содержит , безусловно, имеет табличный вид.

Если вы хотите работать со встроенным диапазоном Excel, вы будете наВы можете манипулировать XML с GraphicFrame вниз, используя lxml вызовы.Я ожидаю, что в графическом фрейме XML содержится ссылка на встроенный файл Excel, который, возможно, можно открыть с помощью openpyxl, чтобы внести в него изменения.Тем не менее, довольно сложная часть кода, в основном сложная из-за необходимости перепроектировать встроенную семантику XML объекта MS Office и перемещаться по структуре пакета для получения байтов встроенного «файла» Excel.

Код диаграммыв python-pptx происходит что-то похожее, потому что в каждой диаграмме есть встроенный файл Excel в файле pptx, который предоставляет данные диаграммы, так что это может быть источником вдохновения, если вы собираетесь принять вызов.

...