Excel (VBA)

Excel VBAに関するフォーラムです。
  • 掲示板への投稿には会員登録(無料)が必要です。会員登録がまだの方はこちら
  • 掲示板ご利用上のお願い」に反するご記入はご遠慮ください。
  • Q&A掲示板の使い方はこちらをご覧ください
トピックに返信
質問

 
(Windows 10 Pro : Excel 2016)
Googleスプレッドシートのダウンロード
投稿日時: 21/01/06 14:15:49
投稿者: hirokiti

【前置き】
最近Googleのスプレッドシートの利用が多くなってきました。私はVBA派なんですが時代の流れに逆らえなくて。。。
【内容】
何とかVBAで操作したくてWebに記載されている情報を見てURLDownloadToFileでGoogleスプレッドシートをXLSXにダウンロードしました。このデータを使えばあとの加工が楽なもんで。
リターンは正常の0でダウンロードされたんですが、Excel形式でファイルはできていないようで開きません。
色々と調べてみたんですが、なかなか情報が見つけられなくて(ウーん)
 
宣言
Public Declare PtrSafe Function URLDownloadToFile Lib "urlmon" _
Alias "URLDownloadToFileA" (ByVal pCaller As Long, _
ByVal szURL As String, ByVal szFileName As String, _
ByVal dwReserved As Long, ByVal lpfnCB As Long) As Long
プロシ−ジャ
lngRes = URLDownloadToFile(0, strURL, strPath, 0, 0)
 
strURL
 
"https://docs.google.com/spreadsheets/d/17qJ9ZyMPvK9UQd0ugmQCSMAG4iKi1YjIHhTUGaNFpeI/export?format=xlsx"
 
strPath
 
C:\請求書\test.xlsx
 
と指定しています。
 
 

回答
投稿日時: 21/01/06 14:34:00
投稿者: WinArrow
投稿者のウェブサイトに移動

実際に使ったことがないのでわかりませんが、
 
ダウンロードとエクスポートの違いではないでしょうか?
 
↓のページを参考に
https://www.appsupport.jp/docs/sp-excelfile/

回答
投稿日時: 21/01/06 16:01:43
投稿者: simple

URLDownloadToFileは認証作業を代行してくれるわけではないので、
それが原因かもしれませんね。
ダウンロードしたファイルは内容はたぶんHTMLなので、
ファイル名を変更したうえで内容確認してみてはどうですか?
 
spreadsheetを一括でダウンロードする などで検索して得られる手作業方式で
落としたほうが早いのでは?

投稿日時: 21/01/06 16:04:00
投稿者: hirokiti

早速お返事有難うございます。マニュアル操作でのダウンロードは実行していて、この場合は上手くデータが編集されることを確認しております。
VBAマクロで実行したいのですが。

投稿日時: 21/01/06 16:09:21
投稿者: hirokiti

有難うありがとうございます。
「ダウンロードしたファイルは内容はたぶんHTMLなので、
ファイル名を変更したうえで内容確認してみてはどうですか」
↓まさしくそのとうりでメモ帳で開くとHTMLでした。
↓ファイル名の識別は.xlsxにしてるんですが。ダメなんですかね?

回答
投稿日時: 21/01/06 16:44:55
投稿者: simple

ご自分の希望だけ言われても、ここは無償のサービスセンターではありません。
 
https://ja.stackoverflow.com/questions/32479/googlespreadsheet%E3%81%A7%E7%AE%A1%E7%90%86%E3%81%97%E3%81%A6%E3%81%84%E3%82%8B%E6%83%85%E5%A0%B1%E3%82%92%E8%87%AA%E5%8B%95%E3%81%A7excel%E3%81%B8%E8%BB%A2%E8%A8%98%E3%81%97%E3%81%9F%E3%81%84
に掲載されている方法を研究してみて下さい。
それが不明なら、セカンドベスト(手作業で一括取得)で妥協するのも普通の話ではないですか?
 
どうしてもというなら、ご自分でお金を払って外注なさるのが早いと思います。
どなたかから回答があるといいですけど。私はここまでです。

投稿日時: 21/01/07 11:55:02
投稿者: hirokiti

長い間フォーラムに参加していなくて失礼しました。
以前、困ったときは的確なアドバイスいただき助かったことが多々あり、
それを思い出して今回投稿させていただきました。
Googleスプレッドシートからマニュアルでダウンロードはできるので大きな支障はないです。
もしVBAでダウンロードができるワザをご存じな方はアドバイス下さい。

回答
投稿日時: 21/01/07 14:24:02
投稿者: 半平太

 >まさしくそのとうりでメモ帳で開くとHTMLでした。
  
 それが本当なら、「拡張子をhtmlに変更して、エクセルで開く」でワークしませんか? 
  
 本筋の策ではないでしょうが・・
 

投稿日時: 21/01/07 16:45:23
投稿者: hirokiti

アドバイス有難うございます。
htmlにしてexcelで開きましたが残念ながら駄目でした。

回答
投稿日時: 21/01/07 23:34:57
投稿者: simple

# 現状であなたがダウンロードした(実質的な)HTMLを拡張子を変更してChromeで開くと、
# ID(mailアドレス)を求める画面が表示されるはずです。
# 入力して、次へを押すと、ダウンロードが実行されるはずです。
# (保存先はダウンロードフォルダ。)
# Google側では、これで十分な対応と考えているのでしょう。
 
たぶん、こちらのサイトをもとにしているものと想像します。
https://excel-ubara.com/excelvba5/EXCELVBA279.html
(本来こういうこともキチンと書いてもらいたいのです)
 
注意深く読んでもらいたいのですが、
マクロ実行する前に、そのSpreadsheetの共有をオンにしているはずです。
あなたは、同様の措置をとったうえで、実行していますか?
共有設定してあれば、Excelファイルが取得できるはずです。
 
共有にしていなくて、非公開のステータスであるとします。
その状態で、マクロでURLDownloadToFileから直接そのSpreadsheetにアクセスされて、
簡単にダウンロードが出来てしまっては逆に問題です。セキュリティが脆弱ということです。
 
Googleアカウントも持っていないかも知れないし、どこの馬の骨かも分からないわけです。
これではセキュリティが守られません。
 
仮にここを強行突破しようとすれば、自前で、
認証するための情報(アクセストークンと呼ばれるらしい)をつけて
ファイル取得する必要があります。
 
詳細調べたわけではありませんが、OAuth2と言うものを使っているようです(引用サイトで引用しているサイト参照)、
簡単な四則演算ではないはずです。そんな脆弱なものでは役に立ちません。
VBAで簡単にできるとも思えません。
それらを調査して対応するインセンティブは少なくとも私は持ち合わせません。
手作業で簡単にダウンロードできる手段が提供されているわけですから。

投稿日時: 21/01/08 09:58:31
投稿者: hirokiti

詳しいアドバイス有難うございます。
頂いた情報をもとに掘り下げてみます。
Webサイトにダウンロードのやり方が掲載されていたので、そのサンプルコードを貼り付けてVBAで実行させたのですが甘くありませんね。

トピックに返信