「スプレッドシート見づらいので、自動でダウンロードしてExcelで見たい。」
「スプレッドシートを定期的にダウンロードしたい。その作業を自動化したい。」
などといったときに使える、PowerShellスクリプトを紹介します。
サンプル
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
Add-Type -AssemblyName System.Windows.Forms #日付取得 $Date = Get-Date -UFormat %Y%m%d #「yyyymmdd_サンプル.xlsx」のファイル名を格納 $FileName = $Date + "_サンプル.xlsx" #変数に保存先のパスを格納 $HozonPath = "C:\サンプルフォルダ" #保存先パス作成(フォルダ + ファイル名) $outFilePath = Join-Path $HozonPath $FileName #Webページからxlsxへのリンクを格納 $url = "https://docs.google.com/spreadsheets/d/(スプレッドシートのIDを入れてください)/export?format=xlsx" try { #実行 Invoke-WebRequest -Uri $Url -OutFile $outFilePath [System.Windows.Forms.MessageBox]::Show("ファイルをダウンロードしました。") } catch { #失敗時のエラーメッセージ [System.Windows.Forms.MessageBox]::Show("ファイルのダウンロードが失敗しました。インターネット接続を確認してください。") } |
サンプルは、以下のことを想定した内容です。
(1) 指定したスプレッドシートをxlsx形式でダウンロードする。
(2) ダウンロードするファイル名は「yyyymmdd_サンプル.xlsx」。(定期的にログを取るときなど)
定期的にログを取る場合、
このスクリプトを実行するbatファイルを作り、
そのbatファイルをタスクスケジューラで定期的に実行させればよいです。
サンプル解説
1 |
Add-Type -AssemblyName System.Windows.Forms |
アセンブリ読み込みます。
ダウンロード成功時・失敗時に表示するメッセージを表示するために使います。
1 2 3 4 5 |
#日付取得 $Date = Get-Date -UFormat %Y%m%d #「yyyymmdd_サンプル.xlsx」のファイル名を格納 $FileName = $Date + "_サンプル.xlsx" |
ファイル名を決めます。
いつダウンロードしたのかわかるよう、ファイル名の冒頭に年月日をつけました。
定期的にダウンロードするのに便利かと思います。
(例)2022年3月1日にダウンロード→「20220301_サンプル.xlsx」
1 2 |
#変数に保存先のパスを格納 $HozonPath = "C:\サンプルフォルダ\" |
ダウンロードするファイルを保存先のフォルダパスを決めます。
フォルダパスを取得する方法を2つ紹介します。
(1) エクスプローラの階層が表示されている箇所をクリックしてコピーする方法
①エクスプローラから保存先のフォルダにアクセスする。
②エクスプローラのパス(下画像の赤枠部分)をクリックしてコピー。
③その後、保存先のフォルダの最後に\を忘れずに書いてください(よく忘れます)
④最後に「”」(ダブルクオーテーション)で挟んでください。
(2) 「パスのコピー」で取得。
保存先のフォルダをエクスプローラで開きます。
上部にある「パスのコピー」をクリックするとコピーできます。右クリック&貼付でOKです。
1 2 |
#保存先パス作成(フォルダ + ファイル名) $outFilePath = Join-Path $HozonPath $FileName |
Join-Pathで、パスと子パスを1つに結合します。
1 2 |
#Webページからxlsxへのリンクを格納 $url = "https://docs.google.com/spreadsheets/d/(スプレッドシートのIDを入れてください)/export?format=xlsx" |
スプレッドシートをxlsx形式でダウンロードするためのリンクです。
スプレッドシートの仕様上、上記のようなリンクで、直接ダウンロードができます。
xlsx以外に、例えば末尾をcsvにすると、CSV形式でダウンロードできます。
その場合、ファイル名も「.csv」にする必要があります。
(スプレッドシートのIDを入れてください)とありますが、
ここは、スプレッドシートのURLの「(ここの部分)」です。「d/」と「/edit」に挟まれています。
https://docs.google.com/spreadsheets/d/(ここの部分)/edit~
ダウンロードしたいスプレッドシートを開き、URLの「(ここの部分)」をコピペしましょう。
1 2 3 4 5 6 7 8 9 10 11 |
try { #実行 Invoke-WebRequest -Uri $Url -OutFile $outFilePath [System.Windows.Forms.MessageBox]::Show("ファイルをダウンロードしました。") } catch { #失敗時のエラーメッセージ [System.Windows.Forms.MessageBox]::Show("ファイルのダウンロードが失敗しました。インターネット接続を確認してください。") } |
Invoke-WebRequestで、Webページを取得します。
スプレッドシートをxlsx形式でダウンロードするURLを使っています。
そのため、これを実行するとファイルが、指定したパスに保存されます。
Startコマンドレットでもファイルをダウンロードできますが、Webブラウザを開いてしまいます。
今回紹介した方法では、Webブラウザを開かないので、便利ですよ。
ダウンロード成功時、メッセージボックスで「ファイルをダウンロードしました。」と表示します。
ダウンロード失敗時、エラーを発するので、try~catchで分岐して、「ファイルのダウンロードが失敗しました。インターネット接続を確認してください。」と表示させています。
当然ですが、スプレッドシートはインターネット繋がっていないと見れません。
失敗するときはインターネット接続がうまくいっていない時なのかなと思います。