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

王林
Lepaskan: 2024-08-16 18:01:40
asal
232 orang telah melayarinya

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 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/dikemas 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:

  • Membuat 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.
  • Membuat 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 mencipta butang
  • Mengapa saya memilih cron
  • Mencipta ini untuk pengguna Windows dan Mac
  • Alat lain yang boleh digunakan untuk automasi Excel
  • Pertanyaan kuasa daripada ciri web
  • Kuasa mengautomasikan
  • 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
Salin selepas log masuk

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')
Salin selepas log masuk

Mencipta helaian baharu dalam fail Excel.

Mencipta helaian khusus 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)
Salin selepas log masuk

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')
Salin selepas log masuk

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')
Salin selepas log masuk

Menggabungkan sel Excel

Untuk menggabungkan sel yang berbeza dalam Excel menggunakan Python,
Muatkan buku kerja
Nyatakan buku kerja aktif
nyatakan sel yang anda ingin gabungkan

# Merging excel cells wb = load_workbook('mimi.xlsx') ws = wb.active ws.merge_cells("A1:D2") wb.save("mimi.xlsx")
Salin selepas log masuk

Sel tidak bercantum

Untuk menyahcantumkan sel yang berbeza dalam Excel menggunakan python,
Muatkan buku kerja
Nyatakan buku kerja aktif
nyatakan sel yang ingin anda hapuskan

# merging excel cells wb = load_workbook('mimi.xlsx') ws = wb.active ws.unmerge_cells("A1:D1") wb.save("mimi.xlsx")
Salin selepas log masuk

Memasukkan sel excel baharu

Untuk memasukkan sel baharu

Muatkan buku kerja
Nyatakan 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")
Salin selepas log masuk

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")
Salin selepas log masuk

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 adalah 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]
Salin selepas log masuk
  • 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
Salin selepas log masuk

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
Salin selepas log masuk
  • 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!

sumber:dev.to
Kenyataan Laman Web ini
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
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!