Добавьте столбцы в списки, используя ячейки с фоновой заливкой - PullRequest
1 голос
/ 02 мая 2019

Члены моей организации хотели бы иметь возможность цветного кодирования больших электронных таблиц информации, которые затем будут перетаскиваться в список серий, используя (используя Openpyxl) Python для вставки в PowerPoint (используя Python-pptx). Я смог заставить все работать, кроме Серии, для которой нужно имя серии и данные серии (организованные в отдельные столбцы, которые могут не быть смежными).

Вот что у меня есть

        series_count = 2
        while series_count <= ws.max_column:
            for s in range(2, ws.max_column + 1):
                series_list = []                
                series_name = ws.cell(4, series_count).value
                for c in range(4, ws.max_row + 1):
                    cell = ws.cell(row = c, column = series_count)
                    if cell.value != series_name:
                        series_list.append(cell.value)
                chart_data.add_series(series_name, series_list, '0%') #Meant to take the series_name and series_list and create a chart using python-pptx
                series_count += 1

Это захватывает только одну серию и не вставляет ее в данные диаграммы. Я не получаю никаких исключений, но при открытии документа PowerPoint есть только пустые поля диаграммы.

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

        series_count = 2
        while series_count <= ws.max_column:
            for s in range(2, ws.max_column + 1):
                series_list = []                
                series_name = ws.cell(4, series_count).value
                for c in range(4, ws.max_row + 1):
                    cell = ws.cell(row = c, column = series_count)
                    if cell.value != series_name:
                        series_list.append(cell.value)
                chart_data.add_series(series_name, series_list, '0%')
                series_count += 1

Я новичок, поэтому я рад рассмотреть другие подходы к этой проблеме, которые достигают того же результата с минимальным вкладом моих даже менее технических коллег. (Они могут управлять цветом, но другое форматирование не работает.)

Спасибо за любую помощь!

1 Ответ

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

Мне кажется, этот код работает.

    series_count = 2
    while series_count <= ws.max_column: #searches sheet for color-coded data and pulls it into series. 
        for s in range(2, ws.max_column + 1):
            series_list = []
            for c in range(4, ws.max_row + 1):
                cell = ws.cell(row = c, column = series_count)
                if cell.fill.start_color.index == 9:
                    series_list.append(cell.value)
                elif cell.fill.start_color.index == 8:
                    series_name = cell.value
                else:
                    pass
            if len(series_list) > 0:
                print "Adding", series_name, series_list
                chart_data.add_series(series_name, series_list, '0%')
            else:
                pass
            series_count += 1

Спасибо за помощь!

...