Как сохранить существующий заголовок оси при изменении форматов в Openpyxl? ⇐ Python

Программы на Python
Anonymous
Как сохранить существующий заголовок оси при изменении форматов в Openpyxl?

Сообщение Anonymous »

Я пытаюсь автоматизировать форматирование диаграмм для своей работы. Часто нам приходится создавать более 50 диаграмм с определенными стилями. Единственное отличие от диаграмм — это названия осей, которые необходимо редактировать вручную для понимания клиента. Я уже написал код, который форматирует диаграмму в нужный формат. Единственная проблема в том, что я не знаю, как указывать только форматы, не указывая, каким должен быть заголовок оси. Мой код правильный.

Код: Выделить всё

    import openpyxl as opyxl
from openpyxl.styles import Font
from openpyxl.chart.text import RichText
from openpyxl.drawing.text import Paragraph, ParagraphProperties, CharacterProperties, Font, RegularTextRun
from openpyxl.xml.functions import fromstring
from openpyxl.chart.shapes import GraphicalProperties

#The Point of This Program is to create a cleaner program

def graph_formatting(file, font_style = 'Times New Roman', fill_color = "000000", xt_name = "Default", yt_name = "Default",  font_size = 1000, bold = '0'):

wb = opyxl.load_workbook(file)

for sheets in wb.chartsheets: #loops through available chartsheets

dechart = sheets._charts[0]

#This specifies the axis format using XML;
xml = f"""









{yt_name}



"""

dechart.y_axis.title.tx.rich = RichText.from_tree(fromstring(xml)) #Change the format using specified XML;

#Same idea
xml = f"""









{xt_name}



"""
dechart.x_axis.title.tx.rich = RichText.from_tree(fromstring(xml))

#Changes rest of the of charts, uch as axis labels
font = Font(typeface=font_style) #set the font
size = font_size #set the font size
cp = CharacterProperties(latin=font, sz=size, b=False)
pp = ParagraphProperties(defRPr=cp)
dechart.x_axis.txPr = RichText(p=[Paragraph(pPr=ParagraphProperties(defRPr=cp), endParaRPr=cp)]) #changes the x axis label font
dechart.y_axis.txPr = RichText(p=[Paragraph(pPr=ParagraphProperties(defRPr=cp), endParaRPr=cp)]) #changes the y axis label font

#chart styling for the minor details

dechart.graphical_properties = GraphicalProperties()
dechart.graphical_properties.line.noFill = True
dechart.graphical_properties.line.prstDash = None

dechart.x_axis.graphicalProperties.line.solidFill = fill_color #changes the line color

dechart.y_axis.graphicalProperties.line.noFill=False #draws the y axis line

dechart.y_axis.majorGridlines = None #gets rid of gridline

dechart.y_axis.majorTickMark = 'out' #create tickmarks for x and y axis

dechart.x_axis.majorTickMark = 'out'

#wb.save(path)
if dechart:
wb.save(file)
По большей части это работает. Я просто хочу сохранить существующее название оси как есть. Например, если в заголовке оси написано «Процент клиентов», то после запуска программы все равно должно быть указано «Процент клиентов», а не «По умолчанию». Я пытался удалить строку

Код: Выделить всё

{yt_name}
в XML, но теперь он просто стирает заголовок оси. Я пытался просмотреть документацию openpyxl, но не нашел решения.
Идеальный рабочий процесс с этой программой:
  • Я создаю диаграмму в Excel.
  • Я форматирую диаграмму в Excel с помощью этой программы.
  • Два дня спустя мой начальник попросите меня создать еще одну диаграмму в том же файле.
  • Я создаю еще одну диаграмму.
    Я форматирую диаграмму с помощью той же программы.
Проблема в том, что когда я использую программу во второй раз, старые названия осей в старых диаграммах будут заменены на «По умолчанию»

Подробнее здесь: https://stackoverflow.com/questions/790 ... n-openpyxl

Вернуться в «Python»