Как проверить ячейки на наличие чисел и вывести их суммы?

Имеется файл формата .xlsx.

Задача: вычислить сумму чисел, заключенных в данном столбце

Проблема: при наличии в столбце чего-то кроме числа, подсчет невозможен

Не могу понять, как можно поставить проверку ячейки на наличие числа?

Что уже есть:

import openpyxl

rb = openpyxl.load_workbook('/путь_к_файлу/TestData.xlsx')

sheet = rb['Sheet1'] 

len_var = column_len(sheet,4)

cell = 0

# Пробег по всему столбцу
for i in range(1,len(sheet['C'])):
    
    # Если в ячейке число, то закидывать его в сумму
    if (sheet.cell(row = i, column = 3).?????): # Как поставить проверку на наличие в ячейке числа?
    
        cell+= float(sheet.cell(row = i, column = 3).value) # Суммируем числа в ячейках третьего столбца

print (cell)

Ответы (2 шт):

Автор решения: MaxU

Воспользуйтесь модулем Pandas - он сделает за вас всю "грязную" работу:

import pandas as pd   # pip install pandas | conda install pandas

filename = "/Downloads/TestData.xlsx"
# читаем/парсим Excel файл в Pandas.DataFrame
df = pd.read_excel(filename)
# df.iloc[:, 2] - выбираем третий столбец по индексу (индексация начинается с нуля)
# функция `pd.to_numeric(column, errors="coerce")` пытается преобразовать все значения столбца в числа, 
# если это невозможно заменяет значения на `NaN` (Not a Number)
res = pd.to_numeric(df.iloc[:, 2], errors="coerce").sum()
print(f"Сумма значений столбца 2 (нумерация начинается с нуля): {res}")

вывод:

Сумма значений столбца 2 (нумерация начинается с нуля): 16.75

PS функция pd.read_excel() по умолчанию ожидает в первой строке Excel файла наименования столбцов и в таком случае к столбцам DataFrame удобнее обращаться по имени - df["column_name"]

PPS Tutorial: "10 minutes to Pandas"

→ Ссылка
Автор решения: Vadim.Sharoikin

с вашим же кодом используя isinstance

import openpyxl

rb = openpyxl.load_workbook('TestData.xlsx')

sheet = rb['Sheet1'] 
cell = 0
for i in range(1,len(sheet['C'])+1):
    if isinstance(sheet.cell(row = i, column = 3).value,(float, int)): # проверка на тип int/float
         cell+= sheet.cell(row = i, column = 3).value # Суммируем числа в ячейках третьего столбца

print (cell)

или просто try/except

import openpyxl

rb = openpyxl.load_workbook('TestData.xlsx')

sheet = rb['Sheet1'] 
cell = 0

for i in range(1,len(sheet['C'])+1):
    
    try :    
        cell+= float(sheet.cell(row = i, column = 3).value)
    except:
        pass

print(cell)
→ Ссылка