Rumah >pembangunan bahagian belakang >Tutorial Python >Cara Mengautomasikan(membuat, mengemas kini) Fail Excel daripada API dengan Python dan Openpyxl.

Cara Mengautomasikan(membuat, mengemas kini) Fail Excel daripada API dengan Python dan Openpyxl.

王林
王林asal
2024-08-16 18:01:40417semak imbas

How to Automate(create, update) Excel Files from APIs with Python and 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.

Alat Diperlukan

  • VScode sudah tentu
  • Python dipasang/kemas kini
  • Persekitaran maya untuk menjalankan sebarang pemasangan atau kemas kini baharu untuk kod Python anda.
  • Persekitaran maya ialah .venv. Anda akan melihatnya dalam vscode anda.
  • Pasang openpyxyl
  • Pasang sebarang pergantungan lain yang diperlukan.
  • Mulakan.

Aspek Berbeza yang akan kami pertimbangkan:

  • Mencipta fail Excel baharu dengan python
  • Mengemas kini fail Excel sedia ada dengan python Mengemas kini helaian fail Excel tertentu hanya dengan Python
  • Menggunakan API untuk mengemas kini fail Excel dan helaian fail Excel.
  • Mencipta butang yang membolehkan pengguna mengemas kini pada klik.
  • Menambah tarikh dan masa dinamik dalam kod anda
  • Alternatif kepada butang Excel ialah cron atau Windows shell
  • Daripada VBA, apa lagi yang boleh?
  • Isu yang dihadapi dengan menulis VBA dalam MacBook
  • Isu yang saya hadapi semasa membuat butang
  • Mengapa saya memilih cron
  • Membuat ini untuk kedua-dua pengguna Windows dan Mac
  • Alat lain yang boleh digunakan untuk automasi Excel
  • Pertanyaan kuasa daripada ciri web
  • Kuasa automatik
  • Visual Basic dalam Excel

Mencipta fail Excel baharu dengan python

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 baharu dalam fail Excel.

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)

Mengubah suai helaian Excel.

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')

Mengakses berbilang sel

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')

Menggabungkan sel Excel

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")

Sel tidak bercantum

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")

Memasukkan sel excel baharu

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]
  • Creating a button that allows users to update on click. To achieve a button to automatically run your Python script, you need to create a button in your Excel file and write a program using the inbuilt programming language, Visual Basic for applications. Next, you write a program similar to this. An example of a VBA script is below.
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.

  • Adding dynamic dates and time in your code

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
  • An alternative to the Excel button is cron or Windows shell

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, what else is possible?

Instead of VBA, direct Python codes can suffice. you can also use the script and run it as required.

  • Issues faced while writing VBA in a MacBook

The major issue lies in the fact that VBA is a Windows language and hence, has limited functions in a non-windows device.

  • Issues I faced while creating the button

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:

  • Power query from web feature
  • Power automate
  • Visual Basic in Excel

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn