Python

【2024年最新】PythonからGoogleスプレッドシートに出力する方法【スライド21枚で完全解説】

驚く

Pythonでスクレイピング等で取得したデータをGoogleのスプレッドシートに出力する方法をハンズオンで形式で解説しています。記事を読んでいただくと以下デモ動画のようなアプリが作成できます。

サンプルコード

import PySimpleGUI as sg
import gspread
from googleapiclient.discovery import build
from google.oauth2.service_account import Credentials
import datetime

class Logger:
    def __init__(self, window):
        self.window = window

    def print_ref(self, txt):
        str_dateinfo = datetime.datetime.now().strftime("%Y/%m/%d %H:%M:%S") + ':'
        self.window['-LOG-'].print(str_dateinfo + txt)
        self.window.refresh()

def save_to_spreadsheet(data,logger, google_auth_file_path,spreadsheet_key):

    logger.print_ref("Google スプレッドシートに結果を保存しています...")
    logger.print_ref(f"認証JSON: {google_auth_file_path}")

    try:
        # 認証情報の設定
        scope = ['https://spreadsheets.google.com/feeds', 'https://www.googleapis.com/auth/drive']
        creds = Credentials.from_service_account_file(google_auth_file_path, scopes=scope)
        gc = gspread.authorize(creds)

        timestamp = datetime.datetime.now().strftime("%Y%m%d_%H%M%S")
        
        # シートの追加
        sheet = gc.open_by_key(spreadsheet_key).add_worksheet(title=f"test_{timestamp}", rows=50, cols=10)

        # 書き込むデータの例 (適宜変更してください)
        data = ["サンプル", data, 123, "時間",timestamp]

        # values にデータを格納
        values = [data]
        
        # データの書き込み (A1セルから開始)
        sheet.append_rows(values)
        
        # スプレッドシートのURLを取得
        spreadsheet_url = sheet.url
        
        logger.print_ref(f"スプレッドシートに追記しました: {spreadsheet_url}")
        return spreadsheet_url
    except Exception as e:
        logger.print_ref(f"スプレッドシートの保存中にエラーが発生しました: {str(e)}")
        return None 

def main():
    spreadsheet_key = ''
    
    try:
        with open("spred_sheet_key.txt", "r") as f:
            spreadsheet_key = f.read().strip()
    except FileNotFoundError:
        spreadsheet_key = "「spred_sheet_key.txt」ファイルが見つかりません"
        
    layout = [
        [sg.Text("テスト文字を入力してください:")],
        [sg.Input(key='-TEXT-')],
        [sg.Text("Google認証JSONファイル(スプレッドシート用):")],
        [sg.Input(key='-GOOGLE-AUTH-'), sg.FileBrowse()],
        [sg.Text(f'スプレッドシートキー: {spreadsheet_key}')],
        [sg.Button('実行'), sg.Button('クリア'), sg.Button('終了')],
        [sg.Multiline(size=(60, 20), key='-LOG-', autoscroll=True)]
    ]
    window = sg.Window('スプレッド出力テスト', layout)
    logger = Logger(window)
    
    # イベントループ
    while True:
        event, values = window.read()
        if event == sg.WINDOW_CLOSED or event == '終了':
            break
        elif event == '実行':
            # テキスト入力値を取得
            text_input = values['-TEXT-']  # テキスト入力のキー名を修正してください

            # Google認証ファイルのパスを取得
            google_auth_file = values['-GOOGLE-AUTH-']
            
            if not google_auth_file:
                sg.popup_error("Google認証ファイルを選択してください")
                continue
            
            if spreadsheet_key == '' or spreadsheet_key == "spred_sheet_key.txt ファイルが見つかりません":
                sg.popup_error("スプレッドシートキーをspred_sheet_key.txtに入力して再起動して下さい")
                continue
            
            spreadsheet_url = save_to_spreadsheet(text_input, logger, google_auth_file,spreadsheet_key)
            
            if spreadsheet_url:
                logger.print_ref(f"スクレイピング結果をGoogle スプレッドシートに保存しました。\nURL: {spreadsheet_url}")
    
    window.close()
        
if __name__ == "__main__":
    main()

サンプルの流れとして、GUI画面で

  1. 入力データ
  2. Google認証用データ
  3. スプレッドシートのID

を取得しスプレッドシート出力用関数に渡しています。

GUI実装に使っている「PySimpleGUI」は最新バージョンだとアカウント登録を求められるのでダウングレードして使ってます。方法は以下の記事で解説。

【簡単2ステップ】PySimpleGUI有償化への対応:バージョン4へのダウングレード方法 PySimpleGUIがバージョン5から有償化 PySimpleGUIがバージョン5から有償化されたため、バージョン4の最新版に...

上記プログラムを動かすための準備方法は次で解説します。

1.GCPでプロジェクト作成

2.認証用JSONの取得

3.API有効化

4.スプレッドシートの共有

5.Pythonツールと連携

ABOUT ME
tona-code
24/7月末の退職を機に、pythonを使った副業にチャレンジ。 初月から5万以上の収入を得たノウハウを発信中。

COMMENT

メールアドレスが公開されることはありません。 が付いている欄は必須項目です