Rumah >pembangunan bahagian belakang >Tutorial Python >Cara Mengautomasikan(membuat, mengemas kini) Fail Excel daripada API dengan Python dan Openpyxl.
Jadi saya tahu bahawa apabila automasi disebut, ramai orang memikirkannya secara abstrak. mungkin juga memikirkan kedai mekanik untuk pembaikan. lol.
Bagaimanapun, automasi dalam pengaturcaraan ialah kod yang anda tulis tetapi dengan teknik lain untuk membantu menjalankannya dengan betul.
Apabila saya mula-mula mula menggunakan Python, ia adalah untuk menulis struktur data dan algoritma tetapi saya kemudiannya mula menggunakannya untuk perkara lain seperti mencuba pembangunan model ML saya dan kemudian Python untuk pengaturcaraan.
Untuk artikel ini, saya akan menyediakan panduan langkah demi langkah tentang cara saya mengautomasikan fail Excel dan helaian berbeza pada MacBook, tanpa menggunakan asas visual untuk aplikasi.
Pertama sekali, untuk bermula, anda tidak perlu menjadi pembangun Python kerana saya akan menampal coretan kod di sini.
Aspek Berbeza yang akan kami pertimbangkan:
Membuat helaian Excel dalam Python dengan openpyxl adalah mudah.
Apa yang anda perlu lakukan ialah memasang openpyxl, panda dan permintaan jika anda mendapat data daripada API.
Pergi ke dokumentasi openpyxl untuk mengetahui cara mengimportnya ke dalam aplikasi anda dan pakej yang anda mahu gunakan.
import pandas import requests from openpyxl import Workbook, load_workbook from openpyxl.utils import get_column_letter
Seterusnya,
anda membuat buku kerja baharu
Tetapkannya sebagai buku kerja aktif
Tambahkan tajuk dan pengepala anda dan isikan data
Simpan buku kerja baharu dengan nama dan tada Excel pilihan anda!
anda telah mencipta fail Excel pertama anda.
# 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')
Mencipta helaian tertentu dalam fail Excel anda adalah proses yang serupa. namun, anda perlu menentukan helaian yang akan dibuat dengan nama helaian.
# create sheet wb.create_sheet('Test') print(wb.sheetnames)
Untuk mengubah suai helaian Excel dan bukan fail penuh,
Muatkan buku kerja yang anda mahu ubah suai
Mereka menentukan helaian tertentu untuk diubah suai menggunakan nama atau indeksnya. Adalah lebih selamat untuk menggunakan indeks sekiranya nama akhirnya berubah.
Dalam coretan kod di bawah, saya menggunakan label Helaian
# wb = load_workbook('mimi.xlsx') # modify sheet ws = wb.active ws['A1'].value = "Test" print(ws['A1'].value) wb.save('mimi.xlsx')
Untuk mengakses berbilang sel,
Muatkan buku kerja
Jadikan ia sebagai buku kerja aktif
gelung melalui baris dan lajurnya
# 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')
Untuk menggabungkan sel yang berbeza dalam Excel menggunakan Python,
Muatkan buku kerja
Tunjukkan buku kerja aktif
nyatakan sel yang ingin anda gabungkan
# Merging excel cells wb = load_workbook('mimi.xlsx') ws = wb.active ws.merge_cells("A1:D2") wb.save("mimi.xlsx")
Untuk menyahcantumkan sel yang berbeza dalam Excel menggunakan python,
Muatkan buku kerja
Tunjukkan buku kerja aktif
nyatakan sel yang ingin anda nyahcantumkan
# merging excel cells wb = load_workbook('mimi.xlsx') ws = wb.active ws.unmerge_cells("A1:D1") wb.save("mimi.xlsx")
Untuk memasukkan sel baharu
Muat buku kerja
Tunjukkan buku kerja aktif
gunakan insert_rows dan insert_columns untuk memasukkan baris baharu atau lajur baharu berdasarkan keutamaan.
# 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")
Mengemas kini fail Excel sedia ada dengan Data dalaman
Tambahkan tatasusunan dan objek anda dan ambil maklumat yang diperlukan
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")
Mengemas kini fail Excel sedia ada dengan Python dan API
Untuk mengemas kini fail Excel menggunakan Python dan API, anda perlu memanggil API ke dalam fail anda menggunakan permintaan Dapatkan.
Tetapkan fail Excel aktif seperti yang diterangkan di atas dan kemudian anda jalankan skrip anda.
Berikut ialah contoh ini:
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/
Atas ialah kandungan terperinci Cara Mengautomasikan(membuat, mengemas kini) Fail Excel daripada API dengan Python dan Openpyxl.. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!