Hello to all! An interesting question was asked to me on Telegram a few days ago. In general, it came down to a task that sounded like: search in an Excel file. Let’s try to solve it? 🙂
Actually, any Excel file is a certain number of rows and columns. We work, as always – using the Openpyxl library, and to work with each individual cell, we use the while loop.
In general, the algorithm of the code comes down to:
1. Open the file ( I wrote about this earlier )
2. Read the first cell in the row
3. Go to the next row in this column.
4. After you have reached the maximum in the number of cells in the column, go to the next column.
5. And so on until the file is completely processed.
Important : in order for the cycle to work, we need to know the number of cells in rows and columns. To do this, use the constructs in the form:

row_max = sheet_active.max_row # Get the number of columns
and:

column_max = sheet_active.max_column # Get the number of columns
The code itself with comments is available below.

import openpyxl

from openpyxl.utils import get_column_letter

import re


path_to_file = 'base_to_search.xlsx'


search_text = input(str('What text are we looking for: '))

search_text = search_text.lower()

print('Ищем:', search_text)


wb = openpyxl.load_workbook(path_to_file) #Loaded our price list

sheets_list = wb.sheetnames # Get a list of all sheets in a file

sheet_active = wb[sheets_list[0]] # Getting started with the very first

row_max = sheet_active.max_row # Get the number of columns

#print(type(row_max))

column_max = sheet_active.max_column #Get the number of rows


print('In file:', path_to_file, '\n Columns:', row_max, '\n rows:', column_max)


row_min = 1 #Variable for line number

column_min = 1 #Column Number Variable


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
Of course, I will be glad to any comments and questions. To do this, use mail or Telegram.