#python #powerpoint
#python #powerpoint
Вопрос:
Это должно быть быстро и легко, я просто пытаюсь преобразовать некоторые VBA в python, и я полагаю, что не понимаю, как здесь работают циклы.
По сути, я пытаюсь подсчитать, сколько рядов есть на диаграмме, а затем выполнить итерацию по этим рядам с помощью for iseries in range(1, nseries):
И в итоге я получаю следующую ошибку:
Трассировка (последний последний вызов): файл «xx.py «, строка 10, для iseries в диапазоне (1, nseries): TypeError: объект ‘method’ не может быть интерпретирован как целое число
Полный сценарий ниже. Операторы print — это моя попытка проверить, правильно ли работал цикл и подсчитал правильное количество рядов / точек. Это также, похоже, не работает, поскольку ничего не было напечатано, так что, возможно, это проблема?:
from pptx import Presentation
prs = Presentation('Test.pptx')
for slide in prs.slides:
for shape in slide.shapes:
if not shape.has_chart:
continue
nseries = shape.chart.series.count
print('Series number:', nseries)
for iseries in range(1, nseries):
series = shape.chart.series(iseries)
npoint = series.points.count
print('Point number:', npoint)
prs.save('test3.pptx')
Комментарии:
1. Пожалуйста, обновите свой вопрос с полным обратным отслеживанием ошибок.
Ответ №1:
Вероятно, это связано с тем, что count
это функция, а не атрибут. Попробуйте изменить строку на:
nseries = shape.chart.series.count()
Однако лучшим способом перебора серии было бы сделать это напрямую, а не использовать индекс:
for series in shape.chart.series:
# do something with series
Комментарии:
1. Спасибо за комментарий! В итоге я получил следующую ошибку:
TypeError: count() missing 1 required positional argument: 'value'
нужно ли мне тогда что-то добавлять в круглые скобки?2. На самом деле я не уверен
count()
, откуда взялся метод, поскольку он не упоминается в документах. Вместо этого вы можете выполнить цикл непосредственно по ряду:for iseries, series in enumerate(share.chart.series): ...
3. спасибо за этот ответ! Я думаю, что это именно то, что я нахожу, атрибут count просто не существует… но ваша версия, использующая enumerate, должна делать точно то же самое 🙂 Я фактически переработал код до just
for series in chart.series
, и это решило его после объявленияchart = shape.chart
. С удовольствием приму ваш ответ, если вы его опубликуете!