Python часто выбирают для автоматизации не потому, что он «лучший», а потому, что для него готовы библиотеки почти под любую офисную задачу: Excel, CSV, PDF, почта, API. Но скрипт, написанный на коленке, может навредить: перезаписать файл или молча пропустить ошибку. Ниже — практичный подход.
Какие задачи подходят
Автоматизировать стоит операции, которые повторяются по одному и тому же правилу и тратят ощутимое время:
- объединение нескольких Excel- или CSV-файлов в один свод;
- переименование и раскладка файлов по папкам;
- проверка данных по правилам и список найденных расхождений;
- формирование документов и отчётов по шаблону;
- загрузка данных из API или открытых источников.
Если правила меняются каждый раз или требуют суждения человека, сначала формализуйте правила, а только потом программируйте.
Подготовка
Установите Python с сайта python.org и нужные библиотеки командой в терминале:
pip install pandas openpyxl
Библиотека pandas работает с таблицами, openpyxl нужна ей для чтения и записи файлов .xlsx. Для проекта удобно создать отдельную папку и виртуальное окружение, чтобы библиотеки разных задач не конфликтовали.
Пример 1: свод из нескольких Excel-файлов
Допустим, филиалы присылают отчёты в одном формате в папку отчёты. Скрипт собирает их в один файл и добавляет столбец с именем источника:
from pathlib import Path
import pandas as pd
папка = Path("отчёты")
части = []
for файл in sorted(папка.glob("*.xlsx")):
таблица = pd.read_excel(файл)
таблица["Файл"] = файл.name
части.append(таблица)
if not части:
raise SystemExit("В папке нет файлов .xlsx")
свод = pd.concat(части, ignore_index=True)
свод.to_excel("свод.xlsx", index=False)
print(f"Объединено файлов: {len(части)}, строк: {len(свод)}")
Столбец «Файл» позволяет потом найти, из какого отчёта пришла строка. Скрипт предполагает, что у всех файлов одинаковые столбцы; если это не так, результат нужно проверять, а не принимать на веру.
Пример 2: безопасная работа с файлами
Любую операцию, которая меняет файлы, сначала запускайте в режиме «только показать». Этот скрипт добавляет к PDF-файлам дату, но переименование включено только после проверки вывода:
from pathlib import Path
from datetime import date
ПРИМЕНИТЬ = False # поменяйте на True после проверки
папка = Path("входящие")
префикс = date.today().strftime("%Y-%m-%d")
for файл in папка.glob("*.pdf"):
новый = файл.with_name(f"{префикс}_{файл.name}")
if новый.exists():
print(f"Пропуск, уже есть: {новый.name}")
continue
print(f"{файл.name} -> {новый.name}")
if ПРИМЕНИТЬ:
файл.rename(новый)
Ошибки и журнал
Скрипт, который сломался и ничего не сообщил, хуже ручной работы. Минимум: записывать, что обработано, и не останавливать весь процесс из-за одного плохого файла.
import logging
logging.basicConfig(filename="работа.log", level=logging.INFO,
format="%(asctime)s %(levelname)s %(message)s", encoding="utf-8")
for файл in папка.glob("*.xlsx"):
try:
данные = pd.read_excel(файл)
logging.info("Прочитан %s, строк: %s", файл.name, len(данные))
except Exception:
logging.exception("Не удалось прочитать %s", файл.name)
Запуск по расписанию
В Windows задачу можно добавить в «Планировщик заданий»: программа — путь к python.exe, аргумент — путь к скрипту. В Linux и macOS используется cron. Перед настройкой расписания несколько раз запустите скрипт вручную и убедитесь, что результат стабилен.
Ограничения
- Скрипт зависит от формата входных файлов: добавили столбец — нужно проверить код.
- Для запуска нужен компьютер или сервер, на котором установлен Python.
- Файлы с паролями и данные клиентов храните отдельно от кода и не отправляйте их в чужие сервисы.
- Если задача сводится к нескольким формулам, Python избыточен — см. «Полезные формулы Excel».
Обсудить задачу ↗