max_col выбирает только два столбца при создании диаграммы p ie с использованием openpyxl - PullRequest
0 голосов
/ 24 января 2020

Я пытаюсь создать диаграмму ap ie, где данные находятся в строке, а метки в столбцах. Я хочу построить график для данных в строке 2 и до столбца 4. Но когда я запускаю, он выбирает только два столбца. Ниже приведен код:

from openpyxl import Workbook

from openpyxl.chart import (
    PieChart,
    ProjectedPieChart,
    Reference
)
from openpyxl.chart.series import DataPoint

data = [
    ['Pie', 'Sold','Added','New','extra'],
    ['Apple', 50,3,4,5],
    ['Cherry', 30,5,6,7],
    ['Pumpkin', 10,7,8,99],
    ['Chocolate', 40,10,29,23],
]

wb = Workbook()
ws = wb.active

for row in data:
    ws.append(row)

pie = PieChart()
labels = Reference(ws, min_row=1, min_col=2, max_col=4)
data = Reference(ws, min_col=2, min_row=2, max_col=4)
pie.add_data(data, titles_from_data=True)
pie.set_categories(labels)
pie.title = "Pies sold by category"
ws.add_chart(pie, "G20")


ws = wb.create_sheet(title="Projection")
wb.save("pie.xlsx")

Это мой результат: enter image description here

Но я ожидаю: enter image description here

Моя проблема: я пытался изменить max_col на другой номер, но он выбирает только 2

Ответы [ 2 ]

0 голосов
/ 27 января 2020

После просмотра исходного кода я нашел решение. pie.add_data по умолчанию обрабатывает каждый столбец как ряд данных. Итак, мне нужно добавить значение from_rows в pie.add_data, чтобы выбрать строку в качестве ряда данных, и пришлось обновить min_col в data = Reference(ws, min_col=1, min_row=2, max_col=4). Ниже приведен желаемый рабочий код:

from openpyxl import Workbook

from openpyxl.chart import (
    PieChart,
    ProjectedPieChart,
    Reference
)
from openpyxl.chart.series import DataPoint

data = [
    ['Pie', 'Sold','Added','New','extra'],
    ['Apple', 50,3,4,5],
    ['Cherry', 30,5,6,7],
    ['Pumpkin', 10,7,8,99],
    ['Chocolate', 40,10,29,23],
]

wb = Workbook()
ws = wb.active

for row in data:
    ws.append(row)

pie = PieChart()
labels = Reference(ws, min_row=1, min_col=2, max_col=4)
data = Reference(ws, min_col=1, min_row=2, max_col=4)
#data = Reference(ws, range_string='Sheet!$B$2:$D$2')

pie.add_data(data, from_rows=2,titles_from_data=True)
pie.set_categories(labels)
pie.title = "Pies sold by category"
ws.add_chart(pie, "H2")


ws = wb.create_sheet(title="Projection")
wb.save("pie.xlsx")
0 голосов
/ 24 января 2020

Я не очень много использовал Openxlpy, но посмотрите, помогут ли приведенные ниже строки решить l oop связанный запрос ..

import openpyxl
wb = openpyxl.load_workbook(r'yourfile.xlsx')
ws = wb['yoursheet']

for rowno, rowval in enumerate(ws.iter_rows( min_col=2, min_row=2,max_col=4)):
    for cell in rowval:
        label = ws.cell(row=cell.row, column=1).value
        print(label)
        data = ws.cell(row=cell.row, column=2).value
        print(data)
...