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

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

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

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

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

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

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

и

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

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

  1. import openpyxl
  2. from openpyxl.utils import get_column_letter
  3. import re
  4.  
  5. path_to_file = 'base_to_search.xlsx'
  6.  
  7. search_text = input(str('Какой текст ищем: '))
  8. search_text = search_text.lower()
  9. print('Ищем:', search_text)
  10.  
  11. wb = openpyxl.load_workbook(path_to_file)  # Грузим наш прайс-лист
  12. sheets_list = wb.sheetnames  # Получаем список всех листов в файле
  13. sheet_active = wb[sheets_list[0]]  # Начинаем работать с самым первым
  14. row_max = sheet_active.max_row  # Получаем количество столбцов
  15. #print(type(row_max))
  16. column_max = sheet_active.max_column  # Получаем количество строк
  17.  
  18. print('В файле:', path_to_file, '\n Cтолбцов:', row_max, '\n Колонок:', column_max)
  19.  
  20. row_min = 1 #Переменная, отвечающая за номер строки
  21. column_min = 1 #Переменная, отвечающая за номер столбца
  22.  
  23. while column_min <= column_max:
  24.     row_min_min = row_min
  25.     row_max_max = row_max
  26.     while row_min_min <= row_max_max:
  27.         row_min_min = str(row_min_min)
  28.  
  29.         word_column = get_column_letter(column_min)
  30.         word_column = str(word_column)
  31.         word_cell = word_column + row_min_min
  32.  
  33.         data_from_cell = sheet_active[word_cell].value
  34.         data_from_cell = str(data_from_cell)
  35.         #print(data_from_cell)
  36.         regular = search_text
  37.         result = re.findall(regular, data_from_cell)
  38.         if len(result) > 0:
  39.             print('Нашли в ячейке:', word_cell)
  40.         row_min_min = int(row_min_min)
  41.         row_min_min = row_min_min + 1
  42.     column_min = column_min + 1

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