Python と Openpyxl を使用して API から Excel ファイルを自動化 (作成、更新) する方法。

王林
リリース: 2024-08-16 18:01:40
オリジナル
413 人が閲覧しました

How to Automate(create, update) Excel Files from APIs with Python and Openpyxl.

したがって、自動化について言及されるとき、多くの人はそれを最も抽象的に考えることを私は知っています。おそらく修理のために整備工場を考えているかもしれません。笑。
いずれにせよ、プログラミングにおける自動化とは、まさにユーザーが作成したコードですが、それを適切に実行するための他のテクニックが必要です。

私が初めて Python を使い始めたとき、それはデータ構造とアルゴリズムを書くためでしたが、その後、ML モデル開発を試してみたり、プログラミングに Python を使うなど、他のことに使い始めました。

この記事では、アプリケーションの Visual Basic を使用せずに、MacBook 上で Excel ファイルとさまざまなシートを自動化する方法について、段階的なガイドを提供します。

まず、ここにコード スニペットを貼り付けるので、始めるのに Python 開発者である必要はありません。

必要なツール

  • もちろん VScode
  • Python がインストール/更新されました
  • Python コードの新規インストールまたは更新を実行するための仮想環境。
  • 仮想環境は .venv です。 vscode に表示されます。
  • openpyxyl をインストールします
  • その他の必要な依存関係をインストールします。
  • 始めましょう。

私たちが検討するさまざまな側面:

  • Python で新しい Excel ファイルを作成する
  • Python を使用して既存の Excel ファイルを更新する Python のみを使用して特定の Excel ファイル シートを更新する
  • API を使用して Excel ファイルと Excel ファイル シートを更新します。
  • ユーザーがクリックすると更新できるボタンを作成します。
  • コードに動的な日付と時刻を追加する
  • Excel ボタンの代替手段は cron または Windows シェルです
  • VBA の代わりに他に何ができるでしょうか?
  • MacBook で VBA を書く際に直面する問題
  • ボタンの作成中に直面した問題
  • cron を選択した理由
  • Windows と Mac の両方のユーザー向けにこれを作成
  • Excel の自動化に使用できるその他のツール
  • Web 機能からのパワークエリ
  • パワーオートメーション
  • Excel の Visual Basic

Pythonで新しいExcelファイルを作成する

openpyxl を使用して Python で Excel シートを作成するのは簡単です。
API からデータを取得する場合は、openpyxl、pandas、リクエストをインストールするだけです。
openpyxl のドキュメントにアクセスして、アプリケーションと使用するパッケージにインポートする方法を確認してください。

import pandas
import requests
from openpyxl import Workbook, load_workbook
from openpyxl.utils import get_column_letter
ログイン後にコピー

次は
新しいワークブックを作成します
アクティブなワークブックとして設定します
タイトルとヘッダーを追加し、データを入力します
新しいワークブックを好みの Excel 名と tada! で保存します。
最初の 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')
ログイン後にコピー

Excel ファイルに新しいシートを作成します。

Excel ファイル内に特定のシートを作成するプロセスも同様です。ただし、作成するシートをシート名で指定する必要があります。

# create sheet
wb.create_sheet('Test')
print(wb.sheetnames)
ログイン後にコピー

Excel シートを変更する。

ファイル全体ではなく Excel シートを変更するには、

変更したいワークブックをロードします
名前またはインデックスを使用して、変更する特定のシートを指定します。最終的に名前が変更される場合に備えて、インデックスを使用する方が安全です。
以下のコード スニペットでは、Sheet ラベル
を使用しました。

# wb = load_workbook('mimi.xlsx')

# modify sheet
ws = wb.active
ws['A1'].value = "Test"
print(ws['A1'].value)
wb.save('mimi.xlsx')
ログイン後にコピー

複数のセルへのアクセス

複数のセルにアクセスするには、
ワークブックをロードします
アクティブなワークブックにします
行と列をループします

# 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')
ログイン後にコピー

Excelのセルを結合する

Python を使用して Excel で異なるセルを結合するには、
ワークブックをロードします
アクティブなワークブックを示します
結合するセルを指定します

# Merging excel cells
wb = load_workbook('mimi.xlsx')
ws = wb.active

ws.merge_cells("A1:D2")
wb.save("mimi.xlsx")
ログイン後にコピー

セルの結合を解除する

Python を使用して Excel で異なるセルの結合を解除するには、
ワークブックをロードします
アクティブなワークブックを示します
結合を解除するセルを指定します

# merging excel cells
wb = load_workbook('mimi.xlsx')
ws = wb.active

ws.unmerge_cells("A1:D1")
wb.save("mimi.xlsx")
ログイン後にコピー

Excelの新しいセルを挿入する

新しいセルを挿入するには

ワークブックをロードします
アクティブなワークブックを示します
insert_rows と insert_columns を使用して、設定に基づいて新しい行または新しい列を挿入します。

# 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")
ログイン後にコピー

内部データを使用して既存の Excel ファイルを更新する
配列とオブジェクトを追加し、必要な情報を取得します

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")
ログイン後にコピー

Python と API を使用して既存の Excel ファイルを更新する

Python と API を使用して Excel ファイルを更新するには、Get リクエストを使用してファイル内で API を呼び出す必要があります。
上記のようにアクティブな Excel ファイルを設定してから、スクリプトを実行します。
以下にその例を示します:

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/

以上がPython と Openpyxl を使用して API から Excel ファイルを自動化 (作成、更新) する方法。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート