Я пробовал разные способы решения этой проблемы. Ниже вы можете увидеть мою последнюю попытку, которая приводит к информации о значении цвета шрифта для всей ячейки и о том, зачеркнута ли ячейка. Но я получаю только одно значение для каждой ячейки, хотя в ячейке много значений, и эти значения можно раскрасить в черный, красный, зеленый... можно раскрасить и можно зачеркнуть или нет.
Я открываю книгу с помощью xlrd. Затем я просматриваю каждую строку и столбец ячеек. Я прочитал шрифт рабочей тетради. Затем сохраняю вstrike_bool и font_color_bool, соответствует ли шрифт разрешенному цвету и зачеркнута ли ячейка. В зависимости от типа значения ячейки я сохраняю его в списке filtered_row с правильным типом данных. Этот список представляет строку файла Excel. Затем я сохраняю отформатированный список значений ячеек строки filtered_row в списке значений столбца filtered_data. Этот список filtered_data затем преобразуется в фрейм данных Pandas df_proper.
Сейчас я получаю для каждой ячейки только одно значение цвета шрифта и одно значение. для вычеркнутой функции. Но мне нужен цвет шрифта для каждого значения в ячейке. То же самое касается вычеркнутых значений в ячейке.
Как просмотреть каждое значение в определенной ячейке и проверить цвет каждого значения в ячейке и то, является ли конкретное значение ячейки вычеркнуто?
Мой код:
Код: Выделить всё
import pandas as pd
import numpy as np
import xlrd
import math
palette = self.get_color_palette(data_path)
workbook = xlrd.open_workbook(data_path, formatting_info=True, on_demand=True)
for sheet_name in sheet_names:
print(f'Read sheet: {sheet_name}')
df_proper = pd.DataFrame()
sheet = workbook.sheet_by_name(sheet_name)
# Iterate through the cells
filtered_data = []
for row in range(sheet.nrows):
filtered_row = []
for col in range(sheet.ncols):
keep_cell = False
cell = sheet.cell(row, col)
xf_index = cell.xf_index
xf = workbook.xf_list[xf_index]
font_index = xf.font_index
font = workbook.font_list[font_index]
strike_bool = False
# Check if cell is struck out
if not font.struck_out:
strike_bool = True
else:
strike_bool= False
font_color_bool = False
# Check if color meets condition
if self.compare_font_color(palette[font.colour_index]):
font_color_bool = True
else:
font_color_bool = False
if font_color_bool and strike_bool:
keep_cell = True
if cell.value == '':
filtered_row.append(math.nan)
elif isinstance(cell.value, (int, float)):
if isinstance(cell.value, float) and cell.value.is_integer():
filtered_row.append(int(cell.value) if keep_cell else None)
elif isinstance(cell.value, float):
filtered_row.append(float(cell.value) if keep_cell else None)
else:
filtered_row.append(int(cell.value) if keep_cell else None)
else:
filtered_row.append(str(cell.value) if keep_cell else None)
filtered_data.append(filtered_row)
# DataFrame aus den gefilterten Daten erstellen
df_proper = pd.DataFrame(filtered_data)
dfs[sheet_name] = []
dfs[sheet_name] = df_proper
workbook.unload_sheet(sheet_name)
Столбец A
Столбец B
Этого может быть нет значение
Значение 2
Значение 3
Значение 4
Скрипт должен распознавать это «Это» написано красным, а «не» — первым. вычеркнуто.
Подробнее здесь: https://stackoverflow.com/questions/792 ... ell-values