2013-07-20 3 views
6

Я использую xlrd и xlwt для прохождения определенных ячеек и проверки их по определенным критериям. Если они соответствуют критериям, которые я перехожу, если нет, я хочу покрасить текст RED. Форматирование от ячейки к ячейке изменяется, у некоторых - цвет фона, некоторые - полужирный, а некоторые - разные, и все эти различия необходимо сохранить.Python xlwt: сохранить все стили, но один

Есть ли простой способ сделать это?

я могу дублировать текущий формат одной из ячеек я знаю, довольно легко с помощью easy_xf,

form = xlwt.easyxf(
      'font: name Gotham Narrow Book, height 140, color red;' 
      'borders: left thin, right thin, top thin, bottom thin;' 
      'pattern: pattern solid, pattern_fore_colour white, pattern_back_colour white' 
      ) 

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

def _getOutCell(outSheet, colIndex, rowIndex): 
    """ HACK: Extract the internal xlwt cell representation. """ 
    row = outSheet._Worksheet__rows.get(rowIndex) 
    if not row: return None 

    cell = row._Row__cells.get(colIndex) 
    return cell 

def setOutCell(outSheet, col, row, value): 
    """ Change cell value without changing formatting. """ 
    # HACK to retain cell style. 
    previousCell = _getOutCell(outSheet, col, row) 
    # END HACK, PART I 

    outSheet.write(row, col, value) 

    # HACK, PART II 
    if previousCell: 
     newCell = _getOutCell(outSheet, col, row) 
     if newCell: 
      newCell.xf_idx = previousCell.xf_idx 
    # END HACK 

outSheet = outBook.get_sheet(0) 
setOutCell(outSheet, 5, 5, 'Test') 
outBook.save('output.xls') 

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

Как я уже говорил, есть ли простой способ достичь этого?

ответ

1

Вы должны проверить модуль xlutils.styles, откройте excel с помощью formatting_info = True, и выполните свою логику и измените относительный стиль ячейки, а затем сохраните excel снова.

open_workbook(excel_file_full_path, formatting_info=True) 
+0

Я собираюсь принять ваш ответ и вознаградить вас за щедрость, но я разочарован. Конечно, я уже сохраняю форматирование (как еще я буду иметь все эти ячейки со всеми этими разными форматами?). Все, что вы мне действительно дали, это ссылка. Вы дали мне то, что мне нужно для решения этой проблемы, да, но вы ничего не объяснили о «xf_idx» или стилях вообще (на что я действительно надеялся на этот вопрос). В любом случае, спасибо за вашу помощь. – scohe001

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