Я использую xlrd и 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, но, внимательно изучив это значение, я обнаружил, что это целое число, что оставило меня в полном недоумении относительно того, как извлечь из него определенные атрибуты стиля, чтобы я мог изменить только цвет шрифта.
Как я уже говорил, есть ли простой способ сделать это?