#python #excel #graph #charts #xlsxwriter
#python #excel #График #Диаграммы #xlsxwriter
Вопрос:
Я использую Python 3.5 в Windows 10. Надеюсь, я смогу сформулировать, чего я пытаюсь достичь, допуская при этом как можно меньше путаницы…
Я написал скрипт на Python, который выполняет несколько задач, некоторые из которых включают создание книги Excel с помощью XlsxWriter на основе данных, сгенерированных из кода в предыдущих частях сценария. Я пытаюсь, чтобы мой скрипт также создал диаграмму, снова используя XlsxWriter, на основе этих данных. Я видел несколько примеров, доступных онлайн, и, хотя они полезны, между примерами и моим личным кодом есть одно конкретное различие, которое заставляет меня сомневаться в том, как я мог бы действовать.
Моя проблема возникает при попытке добавить ряд к диаграмме. При настройке ряда несколько примеров, с которыми я столкнулся, включают что-то вроде этого (примечание: на самом деле я не использую этот точный код):
chart.add_series({
'name': '=Sheet1!$A$2:$A$7 '
})
Из-за природы моего скрипта, который включает в себя циклирование и переменную длину, сгенерированные данные могут быть заполнены по различным столбцам и строкам, поэтому я не могу присвоить чему-то вроде ‘name’ фиксированную ссылку, такую как ‘Sheet1!$ A $ 2: $ A $ 7’, потому что, хотя все данные, сгенерированные из моего скрипта, будут существовать на одном листе, они никогда не будут последовательно находиться только в столбце ‘A’ и только между ячейками 2-7.
Итак, как я могу обойти это? Опять же, из-за переменных элементов и тому подобного, способ, которым я сказал XlsxWriter заполнять ячейки, заключается в создании переменных row_1 = 0
и col_1 = 0
и увеличении их по мере необходимости. Я могу написать что-то вроде
chart.add_series({
'name': '=Sheet1!row:col 7'
})
через XlsxWriter?
РЕДАКТИРОВАТЬ: Итак, я только что узнал, что могу использовать альтернативную индексацию, которая, по-видимому, является моим обходным путем для добавления ряда к диаграмме. Однако я получаю следующее сообщение об ошибке:
UserWarning: Must specify 'values' in add_series()
warn("Must specify 'values' in add_series()")
На основе этого фрагмента кода:
chart.add_series({
'Subscribers': ['Sheet1', row_1 2, col_1,
2 len(sb_subCount_list_clean), col_1]
})
Это потому, что я использую переменные в качестве своих индексов? sb_subCount_list_clean — это список, содержащий данные, которые я использую для создания диаграммы. Столбец будет иметь эту длину плюс 2, потому что у меня есть несколько заголовков, занимающих первые две ячейки.
Ответ №1:
Почти во всех частях XlsxWriter API, везде, где есть ссылка на ячейку типа A1
или диапазон типа =Sheet1!$A$1
, вы можете использовать кортеж или список значений. Для диаграмм вы можете использовать список значений, подобных этому:
# String interface. This is good for static ranges.
chart.add_series({
'name': '=Sheet1!$A$1',
'categories': '=Sheet1!$B$1:$B$5',
'values': '=Sheet1!$C$1:$C$5',
})
# Or using a list of values instead of name/category/value formulas:
# [sheetname, first_row, first_col, last_row, last_col]
# This is better for generating programmatically.
chart.add_series({
'name': ['Sheet1', 0, 0 ],
'categories': ['Sheet1', 0, 1, 4, 1],
'values': ['Sheet1', 0, 2, 4, 2],
})
Обратитесь к документам.
Что касается ошибки, которую вы получаете (после редактирования): Subscribers
это не параметр XlsxWriter, вы, вероятно, имеете в виду values
:
chart.add_series({
'values': ['Sheet1', row_1 2, col_1,
2 len(sb_subCount_list_clean), col_1]
})
Комментарии:
1. Большое вам спасибо! Я наткнулся на ссылку на ячейки в виде списка значений, как вы упомянули!