2016-11-28 2 views
1

Я пытаюсь добавить заголовок в диаграмму powerpoint, созданную с использованием библиотеки python-pptx. Я на OSX с Python 2.7 и Python pptx версии 0.6.1.Заголовок диаграммы с использованием python-pptx

Код для создания диаграммы ниже:

df = pd.read_excel("/Users/vagabond/Documents/python_pptx_3/Bar_Charts.xlsx", sheetname=None) 
f = open('/Users/vagabond/Documents/python_pptx_3/Presentation1.pptx') 
prs = ppt.Presentation(f) 

for sheetname, data in df.iteritems(): 

    slide_layout = prs.slide_layouts[9] 
    slide = prs.slides.add_slide(slide_layout) 

    chart_data = ppt.chart.data.XyChartData() 

    series_1 = chart_data.add_series('Series 1') 

    ## iterate through rows of the data frame for desired columns and add data points 
    for index, row in data.iterrows(): 
     series_1.add_data_point(row['Share_of_apples'], row['Share_of_oranges']) 

    ## define co-ordinates on the slide 
    x, y, cx, cy = Inches(1), Inches(3), Inches(7), Inches(4) 

    chart = slide.shapes.add_chart(
    XL_CHART_TYPE.XY_SCATTER, x, y, cx, cy, chart_data 
).chart 

    prs.save('scatter_charts.pptx') 

Теперь, чтобы добавить название, я добавил следующее после slide.shapes.add_chart вызова:

chart.has_title = True 
chart.title = sheetname 

В случае, если вы задаетесь вопросом, значение имя_файла в chart.title = sheetname - это ключи ключа dict df, которые я читал в первой строке. Для каждого графика я хочу, чтобы ключ пары ключ-значение в словаре был назначен. Программа работает без ошибок.

Проблема в том, что она не добавляет заголовков диаграмм.

Я проверил, если chart.chart_title содержит какое-либо значение, и это дает мне ошибку:

--------------------------------------------------------------------------- 
AttributeError       Traceback (most recent call last) 
<ipython-input-26-7cb6c1e79da2> in <module>() 
     1 chart.has_title = True 
     2 
----> 3 chart.chart_title.has_text_frame = True 

AttributeError: 'Chart' object has no attribute 'chart_title' 
+0

Было ли что-то, что вы читали, что привело вас к мысли, что 'python-pptx' имеет' Chart.chart_title' в своем API? Иногда люди находят одно из предложений по усовершенствованию поиска и воспринимают это как «построенную» информацию, где это на самом деле «не было бы здорово, если бы это сделало это?» information :) – scanny

+0

Да, я прочитал его в документации и думал, что он уже реализован. Возможно, неправильно поняли. Я поделюсь ссылкой. – vagabond

+0

Вот ссылка: http://python-pptx.readthedocs.io/en/latest/dev/analysis/cht-title.html?highlight=title. Есть строка, в которой говорится: «Хотя это еще не будет поддержано, заголовок диаграммы можно указать в XML как ссылку на ячейку на листе Excel. В общем, любые конструктивные операции над заголовком удаляют это». Я не знал, как это интерпретировать. – vagabond

ответ

1

python-pptx не поддерживает API для названия диаграммы еще.

Причина, по которой ваше назначение Chart.has_title не дает ошибки, заключается в том, что Python добавляет этот атрибут при первом назначении (потому что это динамический язык). Этот атрибут отсутствует в API.

+0

Итак, есть ли способ добавить slide_title? Я пытался: 'title_placeholder = slide.shapes.title title_placeholder.text = имя листа', но снова получить ошибку: AttributeError: объект« NoneType »не имеет атрибута« текст ». – vagabond

+0

@vagabond 'slide.shapes.title.text = имя листа' является самым простым. Документы API могут помочь вам, если вы хотите копаться и делать такие вещи, как изменение форматирования отдельного слова в названии или что-то в этом роде. – scanny

+0

же ошибка: '---> 25 slide.shapes.title.text = SheetName 27 prs.save ('scatter_charts.pptx') AttributeError: объект 'NoneType' не имеет атрибут«text'' – vagabond