したがって、自動化について言及されるとき、多くの人はそれを最も抽象的に考えることを私は知っています。おそらく修理のために整備工場を考えているかもしれません。笑。
いずれにせよ、プログラミングにおける自動化とは、まさにユーザーが作成したコードですが、それを適切に実行するための他のテクニックが必要です。
私が初めて Python を使い始めたとき、それはデータ構造とアルゴリズムを書くためでしたが、その後、ML モデル開発を試してみたり、プログラミングに Python を使うなど、他のことに使い始めました。
この記事では、アプリケーションの Visual Basic を使用せずに、MacBook 上で Excel ファイルとさまざまなシートを自動化する方法について、段階的なガイドを提供します。
まず、ここにコード スニペットを貼り付けるので、始めるのに Python 開発者である必要はありません。
私たちが検討するさまざまな側面:
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 ファイル内に特定のシートを作成するプロセスも同様です。ただし、作成するシートをシート名で指定する必要があります。
# create sheet wb.create_sheet('Test') print(wb.sheetnames)
ファイル全体ではなく 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')
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")
新しいセルを挿入するには
ワークブックをロードします
アクティブなワークブックを示します
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]
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/
以上がPython と Openpyxl を使用して API から Excel ファイルを自動化 (作成、更新) する方法。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。