поиск в Excel-файле

Python — поиск в Excel-файле

Привет всем! Интересный вопрос был задан мне в Telegram несколько дней назад. В целом, он сводился к задаче, которая звучала как: поиск в Excel-файле. Давайте попробуем ее решить? 🙂

Собственно, любой Excel-файл — это некоторое количество строк и колонок. Работаем, как всегда — с помощью библиотеки Openpyxl, а для работы с каждой отдельной ячейкой — используем цикл while.

В целом, алгоритм работы кода сводится к:
1. Открываем файл (об этом я писал ранее)
2. Читаем первую ячейку в строке
3. Переходим к следующей строке в этом столбце
4. После того, как достигли максимума по количеству ячеек в столбце — переходим к следующему столбцу.
5. И так до полной обработки файла.

Важно: для того, что бы цикл работал — нам нужно знать количество ячеек в строках и в столбцах. Для этого используем конструкции в виде:

row_max = sheet_active.max_row  # Получаем количество столбцов

и

column_max = sheet_active.max_column  # Получаем количество строк

Сам код с комментариями — доступен ниже.

import openpyxl
from openpyxl.utils import get_column_letter
import re
path_to_file = 'base_to_search.xlsx'
search_text = input(str('Какой текст ищем: '))
search_text = search_text.lower()
print('Ищем:', search_text)
wb = openpyxl.load_workbook(path_to_file)  # Грузим наш прайс-лист
sheets_list = wb.sheetnames  # Получаем список всех листов в файле
sheet_active = wb[sheets_list[0]]  # Начинаем работать с самым первым
row_max = sheet_active.max_row  # Получаем количество столбцов
#print(type(row_max))
column_max = sheet_active.max_column  # Получаем количество строк
print('В файле:', path_to_file, '\n Cтолбцов:', row_max, '\n Колонок:', column_max)
row_min = 1 #Переменная, отвечающая за номер строки
column_min = 1 #Переменная, отвечающая за номер столбца
while column_min <= column_max:
row_min_min = row_min
row_max_max = row_max
while row_min_min <= row_max_max:
row_min_min = str(row_min_min)
word_column = get_column_letter(column_min)
word_column = str(word_column)
word_cell = word_column + row_min_min
data_from_cell = sheet_active[word_cell].value
data_from_cell = str(data_from_cell)
#print(data_from_cell)
regular = search_text
result = re.findall(regular, data_from_cell)
if len(result) > 0:
print('Нашли в ячейке:', word_cell)
row_min_min = int(row_min_min)
row_min_min = row_min_min + 1
column_min = column_min + 1

Конечно, я буду рад любым комментариям и вопросам. Для этого используйте почту или Telegram.

Support the Blog!

Running a blog takes a lot of effort, time, and passion. Your donations help improve the content, inspire new ideas, and keep the project going.
If you’ve enjoyed the blog’s materials, any support would mean the world to me. Thank you for being here! ❤️

PayPal Logo Donate via PayPal

Revolut Logo Donate via Revolut