Maison > Article > développement back-end > Comment automatiser (créer, mettre à jour) des fichiers Excel à partir d'API avec Python et Openpyxl.
Je sais donc que lorsque l'automatisation est évoquée, beaucoup de gens y pensent de manière très abstraite. peut-être même en pensant à un atelier de mécanique pour les réparations. mdr.
Quoi qu'il en soit, l'automatisation en programmation est exactement le code que vous écrivez mais avec d'autres techniques pour aider à l'exécuter correctement.
Quand j'ai commencé à utiliser Python, c'était pour écrire des structures de données et des algorithmes, mais j'ai ensuite progressé vers son utilisation pour d'autres choses, comme essayer le développement de mon modèle ML, puis Python pour la programmation.
Pour cet article, je fournirai un guide étape par étape sur la façon dont j'ai automatisé un fichier Excel et différentes feuilles sur un MacBook, sans utiliser Visual Basic pour les applications.
Tout d'abord, pour commencer, vous n'avez pas besoin d'être un développeur Python car je vais coller un extrait de code ici.
Les différents aspects que nous examinerons :
Créer une feuille Excel en Python avec openpyxl est simple.
Tout ce que vous avez à faire est d'installer openpyxl, pandas et requêtes si vous obtenez des données d'une API.
Accédez à la documentation openpyxl pour savoir comment l'importer dans votre application et les packages que vous souhaitez utiliser.
import pandas import requests from openpyxl import Workbook, load_workbook from openpyxl.utils import get_column_letter
Ensuite,
vous créez un nouveau classeur
Définissez-le comme classeur actif
Ajoutez votre titre et votre en-tête et remplissez les données
Enregistrez le nouveau classeur avec votre nom Excel préféré et tada !
vous avez créé votre premier fichier Excel.
# create a new workbook wb = Workbook() ws = wb.active ws.title = "Data" ws.append(['Tim', 'Is', 'Great', '!']) ws.append(['Sam', 'Is', 'Great', '!']) ws.append(['John', 'Is', 'Great', '!']) ws.append(['Mimi', 'Is', 'Great', '!']) wb.save('mimi.xlsx')
La création d'une feuille spécifique dans votre fichier Excel est un processus similaire. cependant, vous devez spécifier la feuille à créer avec un nom de feuille.
# create sheet wb.create_sheet('Test') print(wb.sheetnames)
Pour modifier une feuille Excel et non le fichier complet,
Chargez le classeur que vous souhaitez modifier
Ils précisent la feuille particulière à modifier en utilisant son nom ou son index. Il est plus sûr d'utiliser l'index au cas où le nom finirait par changer.
Dans l'extrait de code ci-dessous, j'ai utilisé l'étiquette Sheet
# wb = load_workbook('mimi.xlsx') # modify sheet ws = wb.active ws['A1'].value = "Test" print(ws['A1'].value) wb.save('mimi.xlsx')
Pour accéder à plusieurs cellules,
Chargez le classeur
Faites-en le classeur actif
parcourir ses lignes et ses colonnes
# Accessing multiple cells wb = load_workbook('mimi.xlsx') ws = wb.active for row in range(1, 11): for col in range(1, 5): char = get_column_letter(col) ws[char + str(row)] = char + str(row) print(ws[char + str(row)].value) wb.save('mimi.xlsx')
Pour fusionner différentes cellules dans Excel à l'aide de Python,
Chargez le classeur
Indiquez le classeur actif
indiquez les cellules que vous souhaitez fusionner
# Merging excel cells wb = load_workbook('mimi.xlsx') ws = wb.active ws.merge_cells("A1:D2") wb.save("mimi.xlsx")
Pour dissocier différentes cellules dans Excel à l'aide de Python,
Chargez le classeur
Indiquez le classeur actif
indiquez les cellules que vous souhaitez dissocier
# merging excel cells wb = load_workbook('mimi.xlsx') ws = wb.active ws.unmerge_cells("A1:D1") wb.save("mimi.xlsx")
Pour insérer de nouvelles cellules
Charger le classeur
Indiquez le classeur actif
utilisez insert_rows et insert_columns pour insérer de nouvelles lignes ou de nouvelles colonnes en fonction de vos préférences.
# inserting cells wb = load_workbook('mimi.xlsx') ws = wb. is active ws.insert_rows(7) ws.insert_rows(7) ws.move_range("C1:D11", rows=2, cols=2) wb.save("mimi.xlsx")
Mise à jour d'un fichier Excel existant avec des données internes
Ajoutez vos tableaux et objets et saisissez les informations nécessaires
from openpyxl import Workbook, load_workbook from openpyxl.utils import get_column_letter from openpyxl.styles import Font data = { "Pam" : { "math":65, "science": 78, "english": 98, "gym": 89 }, "Mimi" : { "math":55, "science": 72, "english": 88, "gym": 77 }, "Sid" : { "math":100, "science": 66, "english": 93, "gym": 74 }, "Love" : { "math":77, "science": 83, "english": 59, "gym": 91 }, } wb = Workbook() ws = wb.active ws.title = "Mock" headings = ['Name'] + list(data['Joe'].keys()) ws.append(headings) for a person in data: grades = list(data[person].values()) ws.append([person] + grades) for col in range(2, len(data['Pam']) + 2): char = get_column_letter(col) ws[char + '7'] = f"=SUM({char + '2'}:{char + '6'})/{len(data)}" for col in range(1, 6): ws[get_column_letter(col) + '1'].font = Font(bold=True, color="0099CCFF") wb.save("NewMock.xlsx")
Mise à jour d'un fichier Excel existant avec Python et API
Pour mettre à jour un fichier Excel à l'aide de Python et des API, vous devez appeler les API dans votre fichier à l'aide d'une requête Get.
Définissez le fichier Excel actif comme décrit ci-dessus, puis exécutez votre script.
En voici un exemple :
from openpyxl import Workbook, load_workbook import requests from datetime import datetime, timedelta import schedule import time api_url = "https://yourapi" excel_file = "yourfilename.xlsx" def fetch_energy_data(offset=0): response = requests.get(api_url + f"&offset={offset}") data = response.json() if response.status_code == 200: data = response.json() return data["results"], data["total_count"] else: print(f"Error fetching data: {response.status_code}") return [], 0 def update_excel_data(data): try: wb = load_workbook(excel_file) ws = wb.worksheets[0] for row in range(5, ws.max_row + 1): for col in range(1, 9): ws.cell(row=row, column=col).value = None now = datetime.now() current_year = now.year current_month = now.month start_date = datetime(current_year,current_month, 1) end_date = datetime(current_year, current_month, 24) filtered_data = [ result for result in data if start_date <= datetime.fromisoformat(result["datetime"]).replace(tzinfo=None) <= end_date] for i, result in enumerate(filtered_data): row = i + 5 ws[f"A{row}"] = result["datetime"] ws[f"B{row}"] = result["yourinfo"] ws[f"C{row}"] = result["yourinfo"] ws[f"D{row}"] = result["yourinfo"] ws[f"E{row}"] = result["yourinfo"] ws[f"F{row}"] = result["yourinfo"] ws[f"G{row}"] = result["yourinfo"] ws[f"H{row}"] = result["yourinfo"] for row in range(5, ws.max_row + 1): ws[f"I{row}"] = ws[f"I{row}"].value ws[f"J{row}"] = ws[f"J{row}"].value ws[f"K{row}"] = ws[f"K{row}"].value ws[f"L{row}"] = ws[f"L{row}"].value wb.save(excel_file) print(f"Excel file updated: {excel_file}") except FileNotFoundError: print(f"Excel file not found: {excel_file}") except KeyError: print(f"Sheet 'Forecast PV' not found in the Excel file.") schedule.every().hour.do(update_excel_data) while True: schedule.run_pending() if __name__ == "__main__": all_data = [] offset = 0 total_count = 0 while True: data, total_count = fetch_energy_data(offset) if not data: break all_data.extend(data) offset += 100 if offset >= total_count: break update_excel_data(all_data) To update a particular sheet, use the method mentioned above. best practices are done with the excel sheets index number from 0 till n-1. as sheet names can change but sheet positions can not change. wb = load_workbook(excel_file) ws = wb.worksheets[0]
Sub RunPythonScript() Dim shell As Object Dim pythonExe As String Dim scriptPath As String Dim command As String Path to your Python executable pythonExe = "C:\Path\To\Python\python.exe" Path to your Python script scriptPath = "C:\Path\To\Your\Script\script.py" Command to run the Python script command = pythonExe & " " & scriptPath Create a Shell object and run the command Set shell = CreateObject("WScript.Shell") shell.Run command, 1, True Clean up Set shell = Nothing End Sub
the issue with this is some functions do not run in non-windows applications seeing that Excel and VBA are built and managed by Microsoft, there are inbuilt Windows functions for this that can only work on Windows.
However, if you are not writing a very complicated program, it will run properly.
To achieve dynamic dates and times, you can use the date.now function built into Python.
now = datetime.now() current_year = now.year current_month = now.month
For MacBook users, an alternative to the VBA and button feature, you can use a corn for MacBook and a Windows shell for Windows. to automate your task.
You can also make use of Google Clouds's scheduler. that allows you to automate tasks.
Instead of VBA, direct Python codes can suffice. you can also use the script and run it as required.
The major issue lies in the fact that VBA is a Windows language and hence, has limited functions in a non-windows device.
The same issues are related to the VBA code.
Why I opted for cron
I opted for corn because it is available and easy to use to achieve the goals.
Other tools that can be used for the automation of Excel
Other tools include:
Follow me on Twitter Handle: https://twitter.com/mchelleOkonicha
Follow me on LinkedIn Handle: https://www.linkedin.com/in/buchi-michelle-okonicha-0a3b2b194/
Follow me on Instagram: https://www.instagram.com/michelle_okonicha/
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!