Python и работа с Excel

Привет всем! Помните — в какой-то книге, посвященной Python рассказывалось о новичке-программисте, который за пару вечеров набросал программу, сравнивающую стоимость товаров у его друзей, и конкурентов? Давайте попробуем сделать что-то подобное! А значит тема сегодняшней записи — Python и работа с Excel.

Некоторые примеры работы с Excel с помощью Python мы рассматривали ранее (создание файла, удаление определенной страницы из Excel-книги). Сегодня задача будет более интересной, и практической.

Предположим, у нас имеется прайс-лист конкурентов, и наш. Маленький такой прайс — позиций тысяч на 10000… Выглядит совершенно одинаково, только цены — разные. Как понять — где интереснее стоимость? Перебирать вручную все позиции? Долго. А что, если сделать программу, которая будет сличать позиции и сравнивать цены? Давайте попробуем.

Самое обидное, что у меня под рукой нет прайс-листов, которые нужно сравнивать. А значит — их нужно создать 🙂 В целом, планируемый алгоритм программы сводится к следующему:

  • Создаем нужное количество файлов с одинаковым списком товаров
  • Что бы они отличались — стоимость товаров генерируется случайным образом
  • В конце — после создания всех файлов с одинаковыми списками товаров и случайной стоимостью программа сформирует еще один файл, в котором сделает сводку стоимости товара из всех файлов, и укажет — выигрываем мы, или нет по стоимости.

Начинаем кодить:
import openpyxl #Подключаем библиотеку для Python и работа с Excel
import random #Подключаем библиотеку для работы со случайными числами
quantity_files = int(input(‘Сколько файлов нужно создать?: ‘)) #Загоняем в переменную желаемое количество создаваемых файлов

Итак… Количество создаваемых файлов — у нас в переменной quantity_files. Но кроме переменной с количеством файлов у нас будут переменные, отвечающие за наименование листа в книге, начальное состояние количества файлов (сравниваем с переменной quantity_files), а кроме этого — переменные, отвечающие за колонки, с которыми нам предстоит работать. Давайте создадим переменные:

start_number_files = 1 #Переменная, отвечающая за начальное значение при подсчете создаваемых файлов
column_name_a = ‘A’ #Переменная, отвечающая за колонку A
column_name_b = ‘B’ #Переменная, отвечающая за колонку B
sheet_name = ‘Sheet’ #Имя создаваемого листа

Переменные вроде созданы. А теперь пришла пора добавить список товаров, с которыми мы и будем работать:
goods = [‘Компьютер’, ‘Калькулятор’, ‘Вентилятор’, ‘Принтер’, ‘МФУ’, ‘Телефон’, ‘Письменный стол’, ‘Газета’, ‘Наушники’, ‘Сумка’, ‘Документы’, ‘Термопаста’]

Понятно, что список товаров взят «с потолка» 🙂

Итак — переменные есть, список товаров есть. Пора создавать Excel-файлы, и забивать их информацией. Важно уточнить, что так как у нас есть некоторое количество создаваемых файлов (переменная quantity_files) — работать будем в цикле. Т.е. выполняем действия в каждом файле, пока количество созданных файлов не достигнет нужного количества.

while start_number_files <= quantity_files: #Цикл будет работать пока не будет создано запланированное количество файлов

    file_ext = ‘.xlsx’ #Задаем расширение создаваемого файла
    start_number_files = str(start_number_files) #Конвертируем переменную в строковую — что бы можно было объединять
    file_name = start_number_files + file_ext #Получаем итоговое название файла в формате: текущий номер цикла + расширение файла
    wb = openpyxl.Workbook() #Создаем Excel — файл
    wb.create_sheet(sheet_name) #Создаем лист с названием из переменной sheet_name
    worksheet = wb[sheet_name] #Делаем активным лист с названием из переменной sheet_name
    worksheet[‘A1’] = ‘Наименование товара’ #В ячейку А1 пишем заголовок
    worksheet[‘B1’] = ‘Стоимость товара’ #В ячейку B1 пишем заголовок
    start_cell = 2 #начальный номер строки
    for good in goods: #Начинаем цикл, отвечающий за добавление информации в файлы
        start_cell = str(start_cell)
#Конвертируем переменную, отвечающую за номер обрабатываемой ячейки в строковую переменную
        cell_to_write = column_name_a + start_cell
#Формируем переменную, состоящую из номера ячейки и столбца
        worksheet[cell_to_write] = good
        cell_to_write = column_name_b + start_cell
        worksheet[cell_to_write] = random.randrange(1, 100)
#Генерируем случайную стоимость и записываем ее в обрабатываемую ячейку
        start_cell = int(start_cell)
#Конвертируем переменную в интежер
        start_cell = start_cell + 1
#Увеличиваем значение переменной номера ячейки на единицу — что бы обрабатывать следующую
        wb.save(file_name)
#Записываем результат работы в файл
    start_number_files = int(start_number_files)
    start_number_files = start_number_files + 1

Полный вариант кода доступен по ссылке 🙂

Вспоминаем чек-лист, расположенный в самом начале:

  • Создаем нужное количество файлов с одинаковым списком товаров
  • Что бы они отличались — стоимость товаров генерируется случайным образом
  • В конце — после создания всех файлов с одинаковыми списками товаров и случайной стоимостью программа сформирует еще один файл, в котором сделает сводку стоимости товара из всех файлов, и укажет — выигрываем мы или нет по стоимости.

Как видно — сегодня мы сделали два пункта из трех. Учитывая сегодняшнюю тему: Python и работа с Excel — Неплохо 😉
Третий пункт — совсем скоро!

И не забывайте кликать на рекламу! 😉