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.