Как добавить расширенные стили в мою линейную диаграмму Excel, используя Python и Openpyxl - PullRequest
0 голосов
/ 17 июня 2019

Ниже приведен код и итоговая диаграмма Excel, сгенерированные с использованием пакета Python Openpyxl.
Также ниже приведена диаграмма, на которой хотелось бы, чтобы результат выглядел следующим образом. Как добавить следующие вещи в график?Я обведен красным кружком на тех чертах графика, которые я хотел добавить.

  1. Пунктирные прямоугольные линии с каждой точкой данных, простирающейся до оси X графика.

  2. Выровненное по левому краю выравнивание заголовка с 2 отдельными шрифтами / размерами (1 набор шрифтов для «Заголовка», отдельный набор шрифтов для «Заголовка 2» и «Заголовка 3»)

  3. Несколько плавающих текстовых полей под графиками (см. *** Примечания 1,2,3 внизу)

Код

import openpyxl
from openpyxl.chart import LineChart,Reference 
from openpyxl.chart.label import DataLabelList
from openpyxl.chart.text import RichText
from openpyxl.drawing.text import Paragraph, ParagraphProperties, CharacterProperties, Font    


excel = "Template.xlsx"

excel_file = openpyxl.load_workbook(excel)

Output_Sheet = excel_file.get_sheet_by_name('Sheet1')

excel_file.save("Template2.xlsx")

#Define data
data = Reference(Output_Sheet, min_col = 25, min_row = 5, 
                         max_col = 25, max_row = 15) 

#Define category
categories = Reference(Output_Sheet, min_col = 23, min_row = 5, 
                         max_col = 24, max_row = 15) 
#Initialize
chart = LineChart() 

#add Data
chart.add_data(data) 

#Add category
chart.set_categories(categories)

#Define title
chart.title = " Title \n Title2 \n Title3"

# set the title of the x-axis 

# set the title of the y-axis 
chart.y_axis.title = "Revenue "

#Define chart and font
font_test = Font(typeface='Avenir LT Std 55 Roman')
cp = CharacterProperties(latin=font_test, sz=1500)
chart.x_axis.txPr = RichText(p=[Paragraph(pPr=ParagraphProperties(defRPr=cp), endParaRPr=cp)])
chart.y_axis.txPr = RichText(p=[Paragraph(pPr=ParagraphProperties(defRPr=cp), endParaRPr=cp)])
chart.title.txPr = RichText(p=[Paragraph(pPr=ParagraphProperties(defRPr=cp), endParaRPr=cp)])

#Size
chart.height = 17.5 # default is 7.5
chart.width = 40 # default is 15

#Remove legend
chart.legend = None

s2 = chart.series[0]
s2.smooth = True # Make the line smooth

#Show Data Label
chart.dataLabels = DataLabelList() 
chart.dataLabels.showVal = True

#Define font and size
font_test = Font(typeface='Avenir LT Std 55 Roman')
cp = CharacterProperties(latin=font_test, sz=750)

chart.dataLabels.txPr = RichText(p=[Paragraph(pPr=ParagraphProperties(defRPr=cp), endParaRPr=cp)])

#Add Chart
Output_Sheet.add_chart(chart, "B18") 

# save the file 
excel_file.save("Template2.xlsx")

Токовый выход

enter image description here

Требуемый выход

enter image description here

1 Ответ

0 голосов
/ 18 июня 2019

Для такого эффекта вы должны быть готовы проанализировать XML файла. Например, вы можете создать стилизованный заголовок, используя объекты RichText, во многом так же, как вы делаете с метками данных, и похоже, что вам нужно использовать линии на графике наподобие chart.dropLines = ChartLines()

Поскольку openpyxl реализует спецификацию OOXML практически напрямую, лучшей документацией для этого является спецификация OOXML.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...