Ваша основная проблема в том, что ваш код проверяет наличие «Активов» после того, как он записал несколько ячеек в строке.Вам нужно выполнить тесты «какой стиль использовать для всей строки» до того, как вы напишете все ячейки в строке.Установка стиля для объекта xlwt
Row
не работает;это стиль по умолчанию для использования с ячейками, к которым не применяется форматирование.
Другие проблемы:
содержит значение «Активы».Код ниже выделит только столбец с «Активами» в нем
Это неоднозначно.Предположим, что значение ячейки точно равно «Активам капитала»;что ты хочешь делать?Примечание: ваш код выделит такую ячейку и те, что справа от нее.Кроме того, неясно, должна ли быть первая ячейка, содержащая «Активы» (например, в вашем комментарии к другому ответу), или какая-либо ячейка (согласно вашему коду).
Некоторые из ваших вариантов выбора имен переменных делают вашкод очень трудно читаемый, например, 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
, а также поднимает вопрос о том, должны ли у вас быть разные стили для чисел и текста.