2012-02-23 1 views
1

Я пытаюсь применить стиль, который выделит всю строку, если один из столбцов содержит значение «Активы». В приведенном ниже коде будет выделен только столбец с «Активы» в нем вместо целой строки. Есть ли способ применить стиль к целой строке?Как применить стиль к целой строке с помощью XLWT Python Excel?

for row in csv_input: 
    #Iterate through each column 
     for col in range(len(row)): 
      #Apply different styles depending on row 
      if row_count == 0: 
       sheet.write(row_count,col,row[col],headerStyle) 
      elif row_count == 3: 
       sheet.write(row_count,col,row[col],subheadStyle) 
      elif "Assets" in row[col]: 
       sheet.write(row_count,col,row[col],highlightStyle)    
      else: 
       if (is_number(row[col]) == True): 
        sheet.write(row_count,col,float(row[col]),rowStyle) 
       else: 
        sheet.write(row_count,col,row[col],rowStyle) 

Как вы можете видеть, в зависимости от строки я применяю разные стили. Как я могу сделать так, чтобы была выделена любая строка, содержащая ключевое слово «Активы»? Благодаря!

+0

Почему вы приняли ответ, который по вашим собственным комментариям не работает? –

ответ

1

Основная проблема заключается в том, что ваш код проверяет «Активы» после того, как он написал некоторые ячейки в строке. Вам нужно сделать свой тест «какой стиль для всей строки» до, вы пишете любые ячейки в строке. Настройка стиля на объекте xlwt не работает; это по умолчанию стиль для использования с ячейками, которые в противном случае не имеют форматирования.

Другие проблемы:

содержит значение "Активы". В приведенном ниже коде будет выделена только колонка с «Активами» в ней

Это неоднозначно. Предположим, что значение ячейки точно равно «Equity Assets»; что ты хочешь делать? Примечание: ваш код будет выделять такую ​​ячейку и те, что справа. Также неясно, должна ли ячейка «Активы» -пересечь быть первой (пример в вашем комментарии к другому ответу) или любой ячейке (согласно вашему коду).

Некоторые из ваших вариантов для имен переменных делают ваш код очень трудным для чтения, например. row - это список значений ячеек, но col - индекс столбца. Используйте, по возможности, enumerate().

попробовать что-то вроде этого:

for row_index, cell_values in enumerate(csv_input): 
    # Determine what style to use for the whole row 
    if row_index == 0: 
     common_style = headerStyle 
    elif row_index == 3: 
     common_style = subheadStyle 
    elif "Assets" in cell_values: 
     # perhaps elif any("Assets" in cell_value for cell_value in cell_values): 
     # perhaps elif cell_values and cell_values[0] == "Assets": 
     # perhaps elif cell_values and "Assets" in cell_values[0]: 
     common_style = highlightStyle 
    else: 
     common_style = rowStyle 
    # Iterate over the columns 
    for col_index, cell_value in enumerate(cell_values): 
     if common_style == rowStyle and is_number(cell_value): 
      cell_value = float(cell_value) 
     sheet.write(row_index, col_index, cell_value, common_style) 

Мне интересно функции is_number ... Я хотел бы использовать это:

def is_number(s): 
    try: 
     float(s) 
     return True 
    except ValueError: 
     return False 

, который автоматически приводит к:

 if common_style == rowStyle: 
      try: 
       cell_value = float(cell_value) 
      except ValueError: 
       pass 

, а также поднимает вопрос о том, должны ли вы иметь разные стили для чисел d текст.

 Смежные вопросы

  • Нет связанных вопросов^_^