Automatisation Python : Traitement par lots de fichiers (Partie 1)

Création en masse de dossiers et documents - Version Pro

Introduction

Je vais présenter une approche différente pour la création en masse. Dans le travail, certains collègues rencontrent souvent des situations où ils doivent créer des dossiers ou des documents à partir d'un fichier Excel. J'espère que cela pourra être utile.

I. Objectif du projet

Lire les données spécifiques dans un fichier Excel et créer automatiquement des dossiers, des fichiers txt, docx, xlsx, etc., dans un répertoire donné, en utilisant les valeurs des cellules comme nom.

Les informations nécessaires à l'utilisateur sont :

  • Chemin complet du fichier Excel
  • Numéro de la feuille de calcul
  • Ligne et colonne de départ
  • Répertoire de destination
  • Type de fichier à créer (dossier, txt, docx, xlsx)

II. Architecture générale

1. Importation des bibliothèques

Code :

from openpyxl import load_workbook
from openpyxl import Workbook
from docx import Document
import os


Ces modules seront utilisés plus tard.

2. Strucutre principale

Code :

.........        # Entrées utilisateur

for ........:    # Boucle principale
    ......       # Extraction des données Excel

    if ......:  
        ......   # Gestion des cellules vides
    else:
        .....    # Création selon le type sélectionné


La première partie gère les entrées de l'utilisateur pour définir les règles de filtrage.

Ensuite, une boucle itère sur les lignes du fichier Excel.

La structure if-else permet d'exclure les cellules vides, et de créer les éléments selon le type choisi.

Passons maintenant au développement du code.

III. Module d'entrée utilisateur

Code :

print('Entrez le chemin complet du fichier Excel (exemple : E:\\BaiduNetdiskDownload\\bonjour.xlsx) : ', end='')
excel_path = input()
wb = load_workbook(excel_path)

print('Numéro de la feuille de calcul : ', end='')
sheet = int(input())
ws = wb.worksheets[sheet-1]

print(f'Colonne de départ dans la feuille {sheet} : ', end='')
col_num = int(input())

print(f'Ligne de départ dans la feuille {sheet} : ', end='')
row_num = int(input())

print('Répertoire de destination pour la création en masse (exemple : D:\\test) : ', end='')
parent_dir = input()

print('Type de création (1 : dossier, 2 : txt, 3 : docx, 4 : xlsx) : ', end='')
create_type = input()


Ce module correspond aux éléments mentionnés dans la section I. Il permet une sélection précise.

IV. Module de traitement des données

1. Récupération des données Excel

Code :

count = 0

for row in ws.iter_rows(min_row=row_num):
    count += 1
    value = row[col_num-1].value
    ordered_value = f'{count}-{value}'


Cette partie lit chaque cellule dans la plage spécifiée.

2. Création des fichiers

Code :

    if str(value) == 'None':
        pass
    else:
        if create_type == '1':
            name = str(ordered_value)
            path = os.path.join(parent_dir, name)
            os.makedirs(path, exist_ok=True)

            name = f'{str(ordered_value)}.xlsx'
            workbook = Workbook()
            workbook.save(path)

        elif create_type == '2':
            name = f'{str(ordered_value)}.txt'
            path = os.path.join(parent_dir, name)
            with open(path, 'a'):
                os.utime(path, None)

        elif create_type == '3':
            name = f'{str(ordered_value)}.docx'
            path = os.path.join(parent_dir, name)
            document = Document()
            document.save(path)


Ce code est exécuté dans la boucle principale. Deux niveaux d'instructions if sont imbriqués.

Le premier vérifie si la cellule est vide.

Le second exécute l'action en fonction du type choisi par l'utilisateur.

Étiquettes: Python automatisation openpyxl docx os

Publié le 22 août à 13h15