Как изменить заливку DataLabel (используя цвет сплошной заливки)? - PullRequest
0 голосов
/ 23 мая 2019

Я пытаюсь изменить метки данных для диаграммы, которую я пишу на слайде.Я могу получить доступ к тексту метки данных, используя доступные методы, но на данный момент datalabel.fill не существует.Любые обходные пути приветствуются, если не планируется добавление в библиотеку в будущем.

Я уже прошел исходный код в github (https://github.com/scanny/python-pptx), но класс datalabel имеет толькошрифт, has_text_frame, позиция, text_frame, _dLbl, _get_or_add_dLbl, _get_or_add_rich, _get_or_add_tx_rich, _get_or_add_txPr и _remove_tx_rich методы. Нет сценария заполнения или строкового заполнения * * * * * * * * * * * * * * * * *.таблица:

    cell.fill.solid()
    cell.fill.fore_color.rgb = color_list[((col>0)*1)][i%2]

Я смотрю на репликацию функциональности на метках данных для серии диаграмм, с кодом, который выглядит следующим образом:

    label.fill.solid()
    label.fill.rgb = RGBColor(0x9B,0xBB,0x59)
    label.fill.alpha = Alpha(.2)
    label.line.fill.solid()
    label.line.rgb = RGBColor(0xF0,0xF0,0x00)

Ожидаемый выходной XML должен содержать следующее дляметки данных:

    <c:spPr>
     <a:solidFill>
      <a:srgbClr val="9BBB59">
       <a:alpha val="80000"/>
      </a:srgbClr>
     </a:solidFill>
     <a:ln>
      <a:solidFill>
       <a:schemeClr val="F0F000"/>
      </a:solidFill>
     </a:ln>
    </c:spPr>

Фактического вывода не существует, поскольку нет способа сделать это напрямую.

1 Ответ

0 голосов
/ 24 мая 2019

Эта функция еще не реализована, но если она была реализована , это будет свойство .format объекта DataLabel.

Обычно пользователи обходят такой пробел в API, добавляя то, что мы обычно называем «обходной функцией», в клиентский код, который напрямую манипулирует базовым XML, в данном случае, чтобы добавить поддерево <c:spPr> в нужном месте. .

python-pptx обычно может приблизить вас к родительскому элементу. В этом случае он может привести вас к элементу <c:dLbl> следующим образом:

data_label = chart.series[0].points[0].data_label
dLbl = data_label._dLbl
print(dLbl.xml)

Главное подчеркивание в ._dLbl - это ваш намек на то, что вы попадаете во внутренние органы, и если что-то идет не так, как будто вы делаете что-то не так, о проблеме не сообщается.

Объект dLbl является объектом lxml.etree._Element и может управляться этим API. Если у вас есть поиск по «функции обхода python-pptx», вы найдете несколько примеров того, как создавать новые элементы и размещать их там, где вы хотите.

Свойство .xml, доступное в любом объекте XML-элемента python-pptx, удобно для проверки результатов по пути. opc-diag также может пригодиться для проверки файлов PPTX, сгенерированных PowerPoint, или python-pptx для анализа или диагностики.

...