X



【MACRO】Google Apps Script 質問スレ【DRIVE】
0001デフォルトの名無しさん
垢版 |
2014/06/29(日) 11:07:03.38ID:5HmND7Qc
Google Apps Script でのプログラミング等に関する質問スレです
Excel や Access の VBA に不満のあるあなた
web アプリだけでなくクライアントアプリからも利用したいあなた
ローカルなデータベースやファイルだとバックアップに不安のあるあなた

ム板に無かったので立ててみます

Google Apps Script
ttps://developers.google.com/apps-script/
Google Drive API
ttps://developers.google.com/drive/
Getting Started with the Google Data Python Library
ttps://developers.google.com/gdata/articles/python_client_lib

■関連スレ
Google Maps API 質問箱
http://peace.2ch.net/test/read.cgi/tech/1131627583/
Microsoft SkyDrive API
http://peace.2ch.net/test/read.cgi/tech/1385604796/
【GoogleAppsScript】猿92【研究せよ!!!】
http://nozomi.2ch.net/test/read.cgi/php/1398600864/
GoogleAPIってどうよ?
http://nozomi.2ch.net/test/read.cgi/php/1018614427/
Google App Engine for Python 6アプ目
http://nozomi.2ch.net/test/read.cgi/php/1358570953/
Google App Engine for java
http://peace.2ch.net/test/read.cgi/tech/1317639323/
GoogleWebToolkit[GWT]について語ろう
http://nozomi.2ch.net/test/read.cgi/php/1147975874/
0244240
垢版 |
2015/07/06(月) 03:19:41.60ID:c4e3DSSP
>>243
> >>242
> htmlservice + oauth2
ありがとうございます。
調べてみます。
0245デフォルトの名無しさん
垢版 |
2015/07/07(火) 01:32:45.09ID:OGGfcKdI
htmlからツイにつぶやくのをやってたら
(>_<)この顔文字が(&gt;_&lt;)こんななってたぶんそのせいででエラー吐くんだけどこれはreplaceすればいいのかな?
こういう表記になる文字ってたくさんあるのかな?
0250240
垢版 |
2015/07/12(日) 18:50:40.39ID:yhZDzWcx
>>243
> >>242
> htmlservice + oauth2
あれから調べてみましたが、これらを使ってどうアプローチしていいか分かりませんでした。
どういうアプローチを取って良いのか、もう少し詳しく教えていただけないでしょうか?

自分が上でやっていてダメだったアプローチは以下のAuthorization modesをみると納得なのですが
https://developers.google.com/apps-script/add-ons/lifecycle

これらの状況の中でどうやって目的を達成していいか分かりませんでした。
Htmlservice, oauth2ということだったので、
外部サイト情報から取得したキャッシュをHtmlにしてGoogleDrive側に保存すればいいのかな?
とか思っていたのですが、
AuthMode.LIMITEDやAuthMode.CUSTOM_FUNCTIONでは他のサービスへのアクセスは
Any services that don’t access user data
とのことで、キャッシュを書き込めないようです。
実際に試してみましたが、スクリプト単体テストではOKでしたが、イベントハンドラから呼び出すとDrive周りの関数で権限がないといわれました。

oauth2に関してはいまいちよく分かりませんでした。
他社サービスIDなどで別サイトのサービスにアクセスする場合などの認証などに使ったりするようですが、
Googleのアカウントで自身にログインして何かをしろという事でしょうか?

どちらにしろ、AuthMode.FULLで行えるような権限を得られないと、
・キャッシュを作るための外部サイトアクセスとコンテンツ取得
・取得したコンテンツから生成したキャッシュデータの保存(シートorファイル)
が実現できないと思うのですが、どうでしょう?
0251デフォルトの名無しさん
垢版 |
2015/07/12(日) 19:09:03.00ID:slCoB0p4
設定間違えてるに+1
0252デフォルトの名無しさん
垢版 |
2015/07/13(月) 17:53:46.10ID:UxTEJ+9t
node.js / io.js 動けばいいのにね
0254デフォルトの名無しさん
垢版 |
2015/07/19(日) 04:21:49.78ID:eNaDFGYO
分かる人がいたら教えて下さい

function upload() {
var clientId = '*************';
var imgUrl = 'http://www.google.co.jp/images/srpr/logo11w.png';
var service = getService(); //aouth2のなんか
if (service.hasAccess()) {
var url = 'https://api.imgur.com/3/image';
var response = UrlFetchApp.fetch(url, { //ここでエラーが出る
method: 'post',
headers: {
Authorization: 'Client-ID ' + clientId,
},
data: {
image: imgUrl,
type: 'URL'
}
});
var result = JSON.parse(response.getContentText());
return result;
} else {

こういうエラーが出ます
{"data":{"error":"No image data was sent to the upload api","request":"\/3\/image","method":"POST"},"success":false,"status":400}
どこが間違えてるんでしょうか

imgur apiのページ
https://api.imgur.com/
0255デフォルトの名無しさん
垢版 |
2015/07/19(日) 05:55:09.18ID:EU0ROg42
ttp://www.google.co.jp/images/srpr/logo11w.png
404
The requested URL /images/srpr/logo11w.png'; was not found on this server.
0257デフォルトの名無しさん
垢版 |
2015/07/19(日) 07:23:46.52ID:EU0ROg42
さっきはエラってたが
0259デフォルトの名無しさん
垢版 |
2015/07/19(日) 14:52:50.12ID:Npxm1YBj
data: {
type: 'base64',
image: 'hogehoge(base64data)hogehoge'
}

ためしてみたけど

400
Image format not supported, or image is corrupt.

なんぞこれ
0260デフォルトの名無しさん
垢版 |
2015/07/19(日) 16:20:37.89ID:MA6NEEKT
>>254
OAuth2の認証系をしっかり組んでないからじゃないかね。
http://wp.me/p5KJV2-9k
0263デフォルトの名無しさん
垢版 |
2015/07/20(月) 01:12:32.08ID:M+3F+JJV
読んでも全然わかんないや(´・ω・`)
ツイとかはコピペでなんとかなったけどimgurはあんまり見つかんないからやっぱ自力じゃ無理なのかな
0264デフォルトの名無しさん
垢版 |
2015/07/20(月) 01:28:27.60ID:M+3F+JJV
getの方は出来たんだけどなぁ
もうちょっと読んでみよ英語分かんないけど

function getImage(id) {
var service = getService();
if (service.hasAccess()) {
var url = 'https://api.imgur.com/3/image/' + id;
var response = UrlFetchApp.fetch(url, {
method: 'get',
headers: {
Authorization: 'Bearer ' + service.getAccessToken()
}
});
var result = JSON.parse(response.getContentText());
return result;
// Logger.log(result);
} else {
var authorizationUrl = service.getAuthorizationUrl();
Logger.log('Open the following URL and re-run the script: %s',
authorizationUrl);
}
}
0267デフォルトの名無しさん
垢版 |
2015/07/20(月) 23:29:34.40ID:M+3F+JJV
どこに付ければいいか分からないので適当に色々なところに付けてみましたが出来ませんでした
もう少し詳しくお願いします
0268デフォルトの名無しさん
垢版 |
2015/07/21(火) 20:08:20.82ID:S4WMmXN0
headers: {
Authorization: 'Client-ID ' + clientId,
Content-Type: 'application/json'
},
0269デフォルトの名無しさん
垢版 |
2015/07/21(火) 22:14:27.88ID:cjPlPdED
>>268
そう書くと保存の時に「プロパティ ID の後に : がありません。」ってエラーが出るんですけどなんでだろう
headers: {
Authorization: 'Client-ID ' + clientId,
Content-Type: 'application/json'    ←この行
},
0273デフォルトの名無しさん
垢版 |
2015/07/24(金) 15:37:18.28ID:YFrH4Ww5
やさしくやさしくやさしくね
0275デフォルトの名無しさん
垢版 |
2015/08/20(木) 11:36:44.28ID:pV6cw7bo
詰んってる
0277デフォルトの名無しさん
垢版 |
2015/10/15(木) 18:03:33.74ID:bdlPZJI1
py
0279デフォルトの名無しさん
垢版 |
2015/10/28(水) 22:28:05.44ID:58PwIK9B
独自関数(自作)でbackGroundの色が特定の色の場合にsumする関数をつくりたいんだけど、
引数でバックグラウンドの色ってとりだせるの?

というより、適当に作ったんだけど、スクリプト保存しないと独自関数を使用しているセルが更新されなくて困ってる。
0280デフォルトの名無しさん
垢版 |
2015/11/05(木) 20:42:24.52ID:6t/dd9qY
何でもできるようになってきて
すごくありがたく使わせてもらってるんだけど
実行速度が遅いのは何とかしてほしいなぁ
0281デフォルトの名無しさん
垢版 |
2015/11/06(金) 18:30:44.33ID:F7EIvq3A
遅いね
あとREMOTE_ADDRとか取れなかった気がするのも痛い
0282デフォルトの名無しさん
垢版 |
2015/11/18(水) 03:36:46.11ID:CE5+T1br
スプレッドシートの0:00とか時間表記でのものを時と分に分けて数値として扱いたくて
getRangeで2次元配列で読み込んで時間の部分をsplit使って:で分けました
でもSSの時間部分の書式が日付になるとWed Nov 18 2015 00:00〜みたいなDateで読み込まれるし
書式なしテキストにするとStringになって数値として扱えないんです(8:00だったら8と00になって足すと800になる)
どうすればいいでしょうか?
0284デフォルトの名無しさん
垢版 |
2015/11/18(水) 07:26:46.79ID:nLopjri3
>>282
固定させたいカラムを晒してくれないとわからない
カラムによってはその機能が備わってるみたいだし
0287デフォルトの名無しさん
垢版 |
2015/11/27(金) 15:20:14.09ID:c/N8jVfb
火事お見舞い申し上げます。
0288デフォルトの名無しさん
垢版 |
2015/12/03(木) 15:49:15.48ID:5y9yFaIO
test
0289デフォルトの名無しさん
垢版 |
2015/12/16(水) 14:14:14.45ID:kHfROXFw
グローバルでconstを使うと、
「TypeError: 定数 **** の再宣言。」
とエラーが出るのですが、グローバルではconstは使えないのでしょうか?
0291デフォルトの名無しさん
垢版 |
2015/12/19(土) 21:20:25.74ID:0J9ouBIM
シート上のデータをまとめてカレンダーに移したいのですが
GASからbatch requestで処理できますか?
もしできるなら似たような事例でコードがわかるものを教えてください
0293デフォルトの名無しさん
垢版 |
2015/12/20(日) 16:16:42.06ID:8RLYRFXT
どうやんの
0295デフォルトの名無しさん
垢版 |
2015/12/22(火) 14:35:21.60ID:Cg7y4/KF
>>290
すみません、説明が不足していました。
constで定義した名前は他の場所では宣言していません。
ただ、グローバルでconstを使うと、再宣言していない定数でも
「TypeError: 定数 **** の再宣言。」とエラーになってしまいます。
(function内などのスコープではconstは普通に使えています。)

constでなくvarを使うと再宣言のエラーは出ません。
また、const指定する定数の名前は何にしても再宣言のエラーが出ます。

constの使い方が間違っているのかもしれませんが、何かおかしい点があれば教えていただけないでしょうか?
0296デフォルトの名無しさん
垢版 |
2015/12/22(火) 15:36:52.19ID:WRvltcSm
すごく初歩的な質問だと思うのですが原因が解りません
どなたか教えて下さい

下記サイトを参考にスクリプトを作成したのですが
http://chaika.hatenablog.com/entry/2015/09/03/143622
デバッグすると一番最初の
var ss = evt.source.getActiveSheet();
の箇所で
TypeError: undefined からプロパティ「source」を読み取れません。(行 3、ファイル「コード」)
と出てしまいます

ググったところ、スクリプトの作成元が間違っていると出たりするようですが
参考サイトではスプレッドシートから作成、とあるので間違いではないと思います
かといって何が問題なのか解りません
0297デフォルトの名無しさん
垢版 |
2015/12/23(水) 08:28:53.59ID:2F8TsTF+
3. エディタのリソースをクリックして、**現在のプロジェクトのトリガー**を選択
4. 実行をonEditEvent、イベントをスプレッドシートから・編集時 にして保存
0300デフォルトの名無しさん
垢版 |
2015/12/24(木) 16:49:29.65ID:4YM2CMve
あるある
0301デフォルトの名無しさん
垢版 |
2015/12/24(木) 20:07:56.13ID:Dg+ThN48
>>299
296です
私へのレスでしょうか?
何かやり方が間違っているのでしたら教えていただけませんか?
0302デフォルトの名無しさん
垢版 |
2015/12/24(木) 21:14:24.02ID:Icnst7JF
いや、俺もトリガーの機能をここのやり取りで知ったぐらいだけど、
デバッグボタンを押すだけだったら
onEditEvent();
と呼び出されるだけじゃない
evtがundefinedなのはそのせいかなと思って
実際どうなん?

正式なやり方はしらんけど、Loggerでトリガーが起動された時に
どんなオブジェクトが渡されてくるかを調べる
そういうオブジェクトを自力で用意してonEditEventに渡す関数を作成する
その関数をデバッグモードで起動
とかするんじゃないのかな
ググってみればやっている人いるかも
0303デフォルトの名無しさん
垢版 |
2016/01/31(日) 12:12:27.01ID:Y0j0ifuu
とりあえず、「Hello,World」から始めようと思ってやってみたんですが、

「Cannot call Browser.msgBox() from this context;
have you tried Logger.log() instead? (line 1, file "helloworld")」

とエラーがでていきなり動きません。
エラー内容で検索してみたのですが、
同様のケースは見つからず困っています。
原因は何なのでしょう?

ソースは以下の通りです。↓

function myFunction() {
Browser.msgBox("Hello World!");
}
0304デフォルトの名無しさん
垢版 |
2016/01/31(日) 12:40:01.06ID:35YTNVlr
スプレッドシートで やったら普通に動いたよ
this contextとある様にどんな状況でスクリプトを実行しているかが問題だと思う
0305デフォルトの名無しさん
垢版 |
2016/01/31(日) 19:52:12.09ID:iHBYUhz2
>>303
そもそも、Browser.msgBoxってスプレッドシートでしか使えませんよ。

なので、普通は例えば

var ui = SpreadsheetApp.getUi();
ui.alert(“helllo world”);

です。uiのgetUiの部分をDocumentApp.getUiにすればドキュメントでも
同じように使えます。Browser.msgBoxは現在は非推奨ですよ。
0307デフォルトの名無しさん
垢版 |
2016/02/01(月) 17:37:08.92ID:zFO6PW8k
>>304 >>305 >>306
「Hello World」はスプレッドシート経由じゃないと実行できないんですね。
私はGoogleDriveからスクリプトを新規作成して実行していました。
だからエラーがでて動かなかったんですね。

ためしにスプレッドシート経由で動かしてみたところ、
無事、「Hello World」が表示されました。

教えていただいて、ありがとうございました。助かりました。
0308デフォルトの名無しさん
垢版 |
2016/02/29(月) 07:51:01.35ID:tfVkN3NW
インスタのAPIで色々しようと思ったけどoauth2が全然分かんないや
gasでインスタapi扱い方書いてるサイトとかないだろうか?
0309デフォルトの名無しさん
垢版 |
2016/03/16(水) 16:45:59.48ID:AoxyQu12
現在、Google DriveをAPI経由で使うための勉強をしています。

[root]
 +[個人的なフォルダ]
 +[公開している共有しているフォルダ]

このような構成で、API経由で両フォルダ上にファイルの読み書きを想定しています。
ひの際に使うアクセストークンが知られてしまうと
だれでも両フォルダのの中身をいじることができるようになってしまいます。

そこで質問なのですが、「公開している共有しているフォルダ」の操作だけを
許可するトークンは発行できるのでしょうか。

ひとつユーザを作って「公開している共有しているフォルダ」を共有し
そのユーザでトークンを発行すれば期待どおりになるということはわかったのですが、
お金を削減したいので、ひとつの特権管理者ユーザだけで実現したいのです。

お詳しい方いらっしゃいましたら、どうか教えて下さい。
0310デフォルトの名無しさん
垢版 |
2016/03/18(金) 22:40:22.81ID:Q3hcmZkc
>>309
googleアカウントでログインさせろ
0311デフォルトの名無しさん
垢版 |
2016/03/21(月) 20:12:50.73ID:49NnzOUU
>>309
アクセストークン使わずにコーディングする。ヒントhScript.getOauthTokenだったかな。

PDF作成時にも使う手ですよ。
0313デフォルトの名無しさん
垢版 |
2016/04/10(日) 21:58:42.74ID:q/cDt/0h
GASのWebアプリケーションで質問です。

doGetで受けたパラメーターは
e.parameter.xxxで取得できますが
これをクライアントに渡す方法で悩んでます。

今はdoGetで受け取ったらUsetCacheに預けて
html(template)側で<? ?>を使って取り出しています。

初心者ながら、これがスマートじゃない気がして、
違和感を拭いきれないのです。

スマートな方法を教えてください。
0314デフォルトの名無しさん
垢版 |
2016/05/01(日) 16:22:45.99ID:tKi6j9CT
匿名通信(Tor、i2p等)ができるファイル共有ソフトBitComet(ビットコメット)みたいな、
BitTorrentがオープンソースで開発されています

言語は何でも大丈夫だそうなので、P2P書きたい!って人居ませんか?

Covenantの作者(Lyrise)がそういう人と話したいそうなので、よろしければツイートお願いします
https://twitter.com/Lyrise_al

ちなみにオイラはCovenantの完成が待ち遠しいプログラミングできないアスペルガーw


The Covenant Project
概要

Covenantは、純粋P2Pのファイル共有ソフトです

目的

インターネットにおける権力による抑圧を排除することが最終的な目標です。 そのためにCovenantでは、中央に依存しない、高効率で検索能力の高いファイル共有の機能をユーザーに提供します

特徴

Covenant = Bittorrent + Abstract Network + DHT + (Search = WoT + PoW)

接続は抽象化されているので、I2P, Tor, TCP, Proxy, その他を利用可能です
DHTにはKademlia + コネクションプールを使用します
UPnPによってポートを解放することができますが、Port0でも利用可能です(接続数は少なくなります)
検索リクエスト、アップロード、ダウンロードなどのすべての通信はDHT的に分散され、特定のサーバーに依存しません
17
0315デフォルトの名無しさん
垢版 |
2016/05/02(月) 15:16:04.56ID:aR8AOrvI
YahooAPIのスレは無い?
0316デフォルトの名無しさん
垢版 |
2016/05/27(金) 20:19:53.53ID:wEIQ/dS/
Google Apps Scriptって重くね?
かなり処理量すくないスクリプト書いたんだけどモッサリしてる。
起動が遅いだけなのかなぁ。
0318デフォルトの名無しさん
垢版 |
2016/05/28(土) 11:46:40.70ID:YkPoIoOS
コード更新後最初にアクセスしたときにプロセスが立ち上がる感じで
何度かアクセスするといくつかのプロセスが立ち上がるので
最初の数回は全部遅い感じがするが
しばらくすると速くなってくる
ただしプロセスのキャッシュ有効期限が過ぎるとまた最初からなので遅くなったり
0319デフォルトの名無しさん
垢版 |
2016/06/13(月) 11:51:06.87ID:0qOmRg0P
質問です。
スプレッドシート内にいくつかの図形を配置してるんですけど
セルの値が編集された時、一個の図形(地図画像)を
更新(画像削除→画像再配置)したいです。

今は画像を削除→画像作成script と手作業でしています。
この作業をscripで出来ますでしょうか?
0320デフォルトの名無しさん
垢版 |
2016/06/13(月) 15:00:26.33ID:zgrawcOE
削除しなくても更新される
0322デフォルトの名無しさん
垢版 |
2016/06/17(金) 23:25:49.12ID:ZmH+ZAWf
>>321
gasはあくまでサーバーサイドなので
クライアントサイドは普通にjs使えるのでは?
0324デフォルトの名無しさん
垢版 |
2016/07/03(日) 05:32:47.99ID:AkQnhWCl
>>321
元々サイトっていうより、Wikiなので。あのサービスは。

なので埋め込みのApps Scriptを使えって事です。

>>322
それはApps scriptのHTML Serviceの中の話です。
0327326
垢版 |
2016/07/28(木) 10:11:10.32ID:LxRDdK5b
自己解決しました、やりたかったのは同じソースでも実行するfile idによって動作を変えたかった、なんですが、
ローカルで開発してgapps pushするときにうまく切り替えるようにしました、、、
0328デフォルトの名無しさん
垢版 |
2016/07/28(木) 19:04:49.94ID:O8Vfrh0P
FileIDかどうかは知らんけどデプロイして変わったのを知りたいなら
AppVersionみたいなのは実行中に取れた気がする
(管理画面に表示されるやつと同じもの)
0329デフォルトの名無しさん
垢版 |
2016/08/05(金) 07:48:44.14ID:OmPlANC2
質問するスレ間違えてたみたいなのでここで改めて質問させてください

http://hesonogoma.com/stocks/japan-all-stock-prices.html
この株価データサイトのデータを定期的にスプレッドシートに表示させたくて
ここ数ヶ月悩んでます

1
サイト下部にある Copy to Clipboad からコピーしてシートに貼り付ける
というスクリプトは可能ですか?出来るならどうすればいいのでしょうか?

2
CSVファイルをダウンロード
本来はこのやり方を調べていました。が、flashで表示されているのでurlが判らず
お手上げ状態に・・

1が無理なら2を何とかしたいと思っております
0330デフォルトの名無しさん
垢版 |
2016/08/05(金) 12:12:46.89ID:LJe/qM3f
課金が必要
0332329
垢版 |
2016/08/06(土) 08:04:08.54ID:2dv1pXxg
>>331
レス有難うございます。PrintViewでどうにかできそうですか!

でもどうすればいいか解らないレベルなので
とりあえず図書館でjavascriptの本を借りてきました

「はじめに」
読んでるうちに寝てもうたw
0333329
垢版 |
2016/08/06(土) 08:13:37.42ID:2dv1pXxg
ちなみに>329の2を試してみたときのコードが

function getCsvSample() {
var folderId = '***********';
var destfolder = DriveApp.getFolderById(folderId);
var date = "2016-08-04";
var response = UrlFetchApp.fetch("http://hesonogoma.com/stocks/media/swf/copy_csv_xls_pdf.swf";);
destfolder.createFile(date + '.csv', response.getContentText('Shift_JIS'));
}

です。拾ってきたコードをいじって実行したら
謎の文字化け集団が襲ってきました (ここで心折れる)
0334デフォルトの名無しさん
垢版 |
2016/08/10(水) 23:27:34.29ID:U9v+Tybh
GASでスクレイピングしたいんですが、UrlFetchAppで取得したHTML(XMLじゃない)をDOM化するのってできますでしょうか?
正規表現で必要なところを取ってくるのは心が折れそうなので、セレクタで処理したいです。
0335デフォルトの名無しさん
垢版 |
2016/08/11(木) 11:55:28.49ID:v2n9djjr
OK
0337329
垢版 |
2016/08/13(土) 07:36:05.54ID:VdLmMpzK
>>336
レスありがとうございます
試してみたんですが、うまく変換できませんでした
やっぱりurlが違うのかな、、

このスレの質問、回答がほとんど理解できてない程度ので
もう少し基本からじっくり勉強してみます!
>>329の1だけ
引き続き質問を残させてください
0338デフォルトの名無しさん
垢版 |
2016/08/13(土) 17:13:54.48ID:byPJKfY1
GAS関係なくね?
0340デフォルトの名無しさん
垢版 |
2016/08/24(水) 01:12:18.88ID:dEIn8nhr
GASでgoogleAPIを叩いてgmailの下書きを作成するものを作ったのですが、
これを毎日作成(雛形をコピー)するスプレッドシードで使いたいと思っています。
スプレッドシートに書いてコピーすると、gAPIの紐付けプロジェクトが変わっているので設定しなおさなければ使えず、困っています。

スプレッドシートをコピーして、シート上のボタンを押したらすぐに下書きを作れる状態を作りたいのですが、どのような方法がありますか?
0341デフォルトの名無しさん
垢版 |
2016/08/24(水) 09:46:43.51ID:nL2g9QDB
>>340
GASのGmailAppでダメ?
ttp://qiita.com/minanami/items/87641f09192be1b5010b
個人的にはフォームから入力させた方がGUI的にいいと思うけど
スプレッドシートに保存したいならその後GASで自動追加させとけばいいし
0342デフォルトの名無しさん
垢版 |
2016/08/24(水) 15:58:08.87ID:Ku8YOB4B
>>340
ライブラリ化する
レスを投稿する


ニューススポーツなんでも実況