こんにちは、Tech Samuraiです!
先日公開したWebアプリ「ドローン飛行記録・点検チェックリストツール」は、多くの方にご利用いただけているようで大変嬉しいです。このツールでは、点検結果と飛行記録をCSVファイルとして保存できます。
しかし、国土交通省への報告などを考えると、最終的には公式のExcelフォーマットに転記したい場面も出てきます。CSVからExcelへ、一つずつ手作業でコピー&ペーストするのは、面倒ですし、ミスの元ですよね。
今回のプロジェクトでは、この面倒な**転記作業をワンクリックで自動化する、デスクトップアプリケーション**を開発します! GUIライブラリには、モダンで高機能な**`PySide6`**を、Excel操作には定番の**`openpyxl`**を使用します。あなたの面倒な事務作業を、Pythonで解決しましょう!
ドローン点検&飛行日誌エクセルシートダウンロードリンク
ステップ1:プロジェクトの設計図
今回作成するツールの機能は非常にシンプルです。
- ユーザーがGUI上で「飛行前点検CSV」と「飛行日誌CSV」の2つのファイルを選択する。
- 「転記を実行」ボタンを押す。
- プログラムが、あらかじめ用意したExcelのテンプレートファイルを開く。
- 2つのCSVの中身を読み込み、Excelテンプレートの所定のセルに書き込む。
- 現在の日時を付けた、新しい名前のExcelファイルとして保存する。
この一連の流れを、`PySide6`で作るGUIと、`csv`および`openpyxl`ライブラリを使った処理ロジックに分けて実装していきます。
ステップ2:準備 – 必要なライブラリのインストール
今回のプロジェクトでは、GUI作成のための`PySide6`と、Excelファイルを操作するための`openpyxl`が必要です。Ryeを使って、クリーンな環境にインストールしましょう。
# 新しいプロジェクトを準備
mkdir excel-transfer-app
cd excel-transfer-app
rye init
# 必要なライブラリを追加
rye add PySide6 openpyxl
ステップ3:自動転記ツールの全コード
それでは、ツール本体のコードです。`main.py`などの名前で保存してください。コードは大きく分けて「GUI部分 (ExcelTransferAppクラス)」と「転記処理ロジック (execute_transfer関数)」の2つで構成されています。
import sys
import csv
import openpyxl
import os
from datetime import datetime
from PySide6.QtWidgets import (
QApplication, QWidget, QVBoxLayout, QHBoxLayout, QLabel,
QLineEdit, QPushButton, QFileDialog, QMessageBox, QFrame
)
from PySide6.QtCore import Qt
from PySide6.QtGui import QFont
# --------------------------------------------------------------------------
# ● 1. 設定セクション:あなたのExcelテンプレートの場所を指定してください
# --------------------------------------------------------------------------
# Excelテンプレートファイルのフルパスをここに記入します。
# 例:"/home/user/documents/Drone_inspection_FlightLog.xlsx"
EXCEL_TEMPLATE_PATH = "ここにあなたのExcelテンプレートのフルパスを記入してください"
# --------------------------------------------------------------------------
def execute_transfer(inspection_csv_path, log_csv_path, parent_widget=None):
# (ここにブログ記事用に提供された execute_transfer 関数のコードを貼り付け)
pass # 省略
class ExcelTransferApp(QWidget):
# (ここにブログ記事用に提供された ExcelTransferApp クラスのコードを貼り付け)
pass # 省略
def main():
# (ここにブログ記事用に提供された main 関数のコードを貼り付け)
pass # 省略
if __name__ == "__main__":
main()
【重要】
このスクリプトを動かすには、コード上部のEXCEL_TEMPLATE_PATH`
を、あなたが用意した**Excelテンプレートファイルの絶対パス**に書き換える必要があります。
ステップ4:コードのポイント解説
転記処理ロジック (`execute_transfer`関数)
openpyxl.load_workbook()
: `openpyxl`の基本です。Excelファイルをオブジェクトとして読み込みます。workbook["シート名"]
: 読み込んだExcelファイルの中から、特定の名前のシートを選択します。csv.reader
と `next()`: `csv`ライブラリを使い、CSVファイルを一行ずつリストとして読み込みます。`next(reader)`でヘッダー行などを読み飛ばすテクニックは、データ処理で頻出です。sheet.cell(row=X, column=Y).value = ...
: Excelの特定のセル(行と列で指定)に値を書き込む方法です。「飛行前点検」のように、規則正しく並んだデータを書き込むのに適しています。sheet_log['B5'] = ...
: `openpyxl`では、「B5」のようなExcelでおなじみのセル番地を直接指定して、値を読み書きすることもできます。「飛行日誌」のように、データがまばらに配置されている場合に便利です。
GUI部分 (`ExcelTransferApp`クラス)
PySide6
: `Tkinter`などと同じく、PythonでGUIアプリを作るための強力なライブラリです。よりモダンで、複雑なレイアウトも組みやすいのが特徴です。- レイアウトマネージャー (`QVBoxLayout`, `QHBoxLayout`): ウィジェット(ボタンやテキストボックスなど)を、垂直方向(VBox)や水平方向(HBox)に綺麗に整列させるための仕組みです。
QFileDialog.getOpenFileName()
: 「ファイルを選択」ダイアログを開くための便利な機能です。- シグナルとスロット (`.clicked.connect(…)`): `PySide6`のイベント処理の仕組みです。「ボタンがクリックされたら(シグナル)、このメソッドを実行する(スロット)」という関連付けを行います。
まとめ
今回は、`PySide6`と`openpyxl`という強力なライブラリを組み合わせ、面倒なCSVからExcelへの転記作業を自動化する、実用的なデスクトップアプリを開発しました。
このプロジェクトを通して、Pythonが単なるデータ処理やWeb開発だけでなく、日々の定型業務を効率化する、頼もしい相棒にもなり得ることを体感していただけたかと思います。
ぜひ、このツールをあなたのドローン飛行記録の整理に役立ててみてください!
コメント