Цикл таблицы в отчете Python - PullRequest
3 голосов
/ 15 августа 2011

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

Для этого я придумал следующее:

elements = []

table1 = [[34,27,35,35],
          [3,76,23,157],
          [13,137,15,75],
          [56,26,46,26]]




t1 = Table(table1)
for ii in range(len(table1)):
    for jj in range(len(table1)):
        if table1[ii][jj] <=50:
            ourcolor = colors.white
        elif table1[ii][jj] <=100:
            ourcolor = colors.skyblue
        elif table1[ii][jj] <=200:
            ourcolor = colors.green

        else:
            ourcolor = colors.white
        t1.setStyle(TableStyle([('BACKGROUND', (ii,jj), (ii,jj), ourcolor),
                                ('ALIGN', (0,0), (-1,-1), 'CENTER'),
                                ('INNERGRID', (0,0), (-1,-1), 0.25, colors.black),
                                ('BOX', (0,0), (-1,-1), 0.25, colors.black)
                                ]))

elements.append(t1)

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

Любая помощь или идеи будут с благодарностью.

Ответы [ 2 ]

3 голосов
/ 15 августа 2011

Я не знаю достаточно о ReportLab, чтобы знать наверняка, но общая проблема в этом типе кодирования заключается в том, что оси меняются местами.Например, индексирование выглядит следующим образом: table1[ii][jj] означает, что ii - это ось y (строки), а jj - это ось x (столбцы), поэтому вам нужно указать x и y для ReportLab как jj, ii,Проверьте, чтобы при выводе ячеек в ваших выходных данных менялись строки и столбцы.

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

2 голосов
/ 15 августа 2011

Похоже, таблица1 это просто список списков.Я думаю, что этот код будет делать то, что вы хотите, предполагая, что проблема лежит в вашем цикле, а не в модуле reportlab (у меня нет опыта в этом).

a=-1
for ii in table1:
  a = a+1
  b = -1 
  for jj in ii:
    b = b+1
    if jj <=50:
        ourcolor = colors.white
    elif jj <=100:
        ourcolor = colors.skyblue
    elif jj <=200:
        ourcolor = colors.green
    else:
        ourcolor = colors.white
    t1.setStyle(TableStyle([('BACKGROUND', (a,b), (a,b), ourcolor),
                              ('ALIGN', (0,0), (-1,-1), 'CENTER'),
                              ('INNERGRID', (0,0), (-1,-1), 0.25, colors.black),
                              ('BOX', (0,0), (-1,-1), 0.25, colors.black)
                              ]))
...