Ошибка типа: объект ‘method’ не может быть интерпретирован как целое число

#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 . С удовольствием приму ваш ответ, если вы его опубликуете!