Googleスプレッドシートを自動でダウンロードして集計する方法

Googleスプレッドシートを自動でダウンロードして集計する方法 経理・数字の自動化

売上や経費をGoogleスプレッドシートで管理している会社は多いと思います。私の会社もそうです。

集計を自動化しようとしたとき、最初に立ちはだかったのが「ファイルをどうやってパソコンに持ってくるか」でした。

毎回「ファイル → ダウンロード → Excel形式」をクリックしていては、自動化になりません。その1手間が残るだけで、結局やらなくなります。

結論:スプレッドシートには、ダウンロード専用のURLがあります。
そのURLを叩けば、最新版のファイルが1コマンドで手元に落ちてきます。


ダウンロード専用のURLとは

スプレッドシートを開いているときのURLは、こういう形をしています。

https://docs.google.com/spreadsheets/d/【長い文字列】/edit#gid=0

この【長い文字列】が、そのファイルを指す固有のIDです。これを次の形に置き換えると、Excel形式でダウンロードするためのURLになります。

https://docs.google.com/spreadsheets/d/【長い文字列】/export?format=xlsx

末尾を export?format=xlsx に変えるだけです。

ブラウザでこのURLを開くと、その場でファイルがダウンロードされます。まずブラウザで試して、ちゃんと落ちてくることを確認してください。


1コマンドで取り込む

URLが分かれば、あとはパソコンから取りに行くだけです。Macなら標準で入っている curl というコマンドを使います。

curl -L -o ~/作業フォルダ/売上帳.xlsx \
  "https://docs.google.com/spreadsheets/d/【ID】/export?format=xlsx"

指定しているのは2つだけです。

指定 意味
-L 転送先が変わっても追いかける(これが無いと失敗します)
-o 保存先のファイル名

これで、実行するたびに最新版で上書きされます。手作業のダウンロードは、この時点で不要になります。


⚠️ この方法の前提と、その危険性

ここが最も重要な注意点です。

この方法が使えるのは、そのスプレッドシートが「リンクを知っている全員が閲覧可」または「ウェブに公開」になっている場合だけです。

裏を返すと、こうなります。

URLさえ分かれば、社外の誰でも中身を見られる状態になっているということです。

売上や利益、取引先名が入ったファイルであれば、この方法を使ってはいけません。 検索エンジンに拾われる可能性もゼロではありません。

判断の目安

ファイルの中身 この方法
公開しても困らない集計表・シフト表 使ってよい
売上・利益・取引先名・個人情報を含む 使ってはいけない

機密データを扱う場合

非公開のままプログラムから読むには、Google側で「サービスアカウント」という専用の利用者を作り、そのファイルにだけ閲覧権限を渡す方法を使います。

手順は増えますが、公開せずに済みます。 扱うデータが社内の数字なら、最初からこちらを選んでください。

「まず動かしてみたい」段階なら、中身をダミーに差し替えた練習用のシートを作って試すのが安全です。


取り込んだあと:中身を読む

ファイルが手元に来たら、あとはPythonで読めます。Excel形式を読む部品を入れておきます。

pip install openpyxl

読み込みはこれだけです。

import openpyxl

book = openpyxl.load_workbook("売上帳.xlsx", data_only=True)
sheet = book["4月"]

goukei = 0
for row in sheet.iter_rows(min_row=2, values_only=True):
    kingaku = row[3]          # 4列目に金額が入っている想定
    if isinstance(kingaku, (int, float)):
        goukei += kingaku

print(f"合計: {goukei:,.0f}円")

data_only=True を忘れないでください。 これを付けないと、計算式が入ったセルで金額ではなく数式そのものが返ってきます。私はここで一度つまずきました。


2つをつなげて1本にする

取り込みと集計を、1つのファイルにまとめておきます。

#!/bin/zsh
# 最新のスプレッドシートを取ってきて、集計する

FOLDER="$HOME/作業フォルダ"
ID="【スプレッドシートのID】"

curl -sL -o "$FOLDER/売上帳.xlsx" \
  "https://docs.google.com/spreadsheets/d/$ID/export?format=xlsx"

if [ ! -s "$FOLDER/売上帳.xlsx" ]; then
  echo "ダウンロードに失敗しました"
  exit 1
fi

python "$FOLDER/集計.py"

4行目の if が大事です。 通信に失敗すると、中身が空のファイルや、エラー画面のHTMLが保存されてしまいます。それに気づかず集計すると、「売上0円」という間違った結果が普通に出てきます。

⚠️ 自動化で怖いのは止まることではなく、間違った数字が黙って出続けることです。取り込みの成否は必ず確認してください。

この考え方は launchdが動かない・終了コード127の原因と対処 でも触れています。


ここまでで何が変わるか

この時点で、次の作業が消えます。

  • スプレッドシートを開く
  • ダウンロードを選ぶ
  • 形式を選ぶ
  • 保存先を指定する
  • 前のファイルと入れ替える

1回あたり1〜2分の作業ですが、消えるのは時間ではありません。 「面倒だから今日はいいか」がなくなることのほうが大きいと感じています。

取り込んだ数字から月末の着地を計算し、チャットに飛ばすところまでは Googleスプレッドシートの売上から月末着地予想を自動計算しSlackに投稿する方法 に書いています。


まとめ

  • スプレッドシートのURLの末尾を export?format=xlsx に変えるとダウンロード用URLになる
  • curl -L -o で1コマンドで最新版が取り込める
  • この方法は「閲覧可」の設定が前提。売上や個人情報を含むファイルには使わない
  • 機密データはサービスアカウントを使って非公開のまま読む
  • 読み込みは openpyxl の data_only=True
  • ダウンロードの成否は必ず確認する。空ファイルで「売上0円」が出る

自動化は、いちばん手前の「データを持ってくる」ところが片付くと一気に進みます。逆にここが手作業のままだと、その先を作っても使われません。

コメント

タイトルとURLをコピーしました