売上や経費を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円」が出る
自動化は、いちばん手前の「データを持ってくる」ところが片付くと一気に進みます。逆にここが手作業のままだと、その先を作っても使われません。


コメント