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/
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
ライブラリ化する
0344デフォルトの名無しさん垢版2016/08/25(木) 23:18:14.53ID:5XLt8Aa8
>>329,>>343
よっしゃ、俺がやってやらぁ!って思って意気込んでサイトみたら普通にJSONで取れた
ttp://hesonogoma.com/stocks/data/japan-all-stock-prices.json
0345デフォルトの名無しさん垢版2016/08/27(土) 08:39:19.05ID:m8PsOLXX
>>344
おお、、、これで目的は果たせそうです
皆さん長々とありがとうございました!勉強も少しずつ続けます
0346334垢版2016/08/27(土) 11:42:11.09ID:RucMLpGl
>>339
ありがとうございます。ですが、そのライブラリだと正規表現を使うのと全く変わらないです。
いっそのこと自作しようと思います。
ありがとうございました。
0347デフォルトの名無しさん垢版2016/09/28(水) 22:05:17.24ID:eXjFddOW
ここ最近CalendarAppのアクセス頻度でエラーが出るようになった

Googleはアナウンスなしで仕様変更してくるのやめてほしい
0348デフォルトの名無しさん垢版2016/10/19(水) 12:06:30.27ID:r6QG4f4p
G Suite ω
0352デフォルトの名無しさん垢版2016/12/13(火) 18:03:00.36ID:x2U1jQSF
google sitesとスプレッドシートとの連携について教えて下さい。

google sitesで作成したページ(AAAについての確認とします)上に個人名でいくつかの
CK BOXがあります。

----------------------------
<AAAについての確認>
□Aさん
□Bくん
□Cちゃん
□Dちゃん
□Eさん

送信
----------------------------

いくつかのCK BOXにCKが入っているとして”送信”を押したら次の様にスプレッドシートを操作する方法を
教えて下さい。

1. googleドライブ上の指定されたスプレッドシート内に<AAAについての確認>というシートが作成される。
2. 1で作成されたシートにAさんからEさんまでのCK BOX STATUSを記録する
3. 送信した日付も記録する

目的としては、家族内情報共有ホームページを作成したいです。
Googleサイトが無償でホームページが作成できるとのことでGoogleサイトでのこの内容の動きが
出来るか教えていただきたいです。
0353デフォルトの名無しさん垢版2016/12/13(火) 21:30:54.00ID:mRmuTzdU
フォームの名前を<AAAについての確認>とすればいい。
0355デフォルトの名無しさん垢版2016/12/17(土) 01:48:09.89ID:3C8QRPXl
GASであるサイトをスクレイピングしたいけど、ログインしないと情報が取得できない。
クッキーをセットしたりすればログインしてアクセスできるけど、それってセキュリティ的に危険かな?
0356デフォルトの名無しさん垢版2016/12/19(月) 23:51:02.67ID:Hch485Lz
GASでスプレッドシートをいじろうと思ってるのですか、まず有効なスプレッドシートを選択してくださいと。と表示されてできません。なにがダメなのでしょうか。下記のようにやっています。

var ss = SpreadsheetApp.OpenById("");
var sheet = ss.getSheetByName("");

SpreadsheetApp.setActiveSheet(sheet);
0357デフォルトの名無しさん垢版2016/12/20(火) 12:59:03.44ID:lAXr92yw
IDは?
0358デフォルトの名無しさん垢版2016/12/20(火) 19:57:35.71ID:ktde9hau
oops
0359デフォルトの名無しさん垢版2016/12/21(水) 00:25:00.04ID:nYEPRmnr
ID、シート名ともにあってます…

スプレッドシートからスクリプトエディタを使わないとできないのでしょうか?今は別にスクリプトファイルを作ってやってます
0361デフォルトの名無しさん垢版2016/12/22(木) 18:37:45.76ID:0Tg51mYJ
>>356
3行目は開いてるスプレッドシートに対してしか効かないとか。
試してないけど。

別に開かずとも変数sheetは取れてるだろうから、3行目は書かなくてもその後のやりたいことはできるのでは?
0364デフォルトの名無しさん垢版2016/12/27(火) 01:28:56.39ID:tIGH6DEG
みなさんありがとうございました!

Var SS = SpreadsheetApp.openById("");
Var sheet = SS.getSheetByName("");

SpreadsheetApp.getActivesheet ();

でエラー出ずにやることができました
0365デフォルトの名無しさん垢版2016/12/27(火) 14:37:37.38ID:6KX94UiV
sheetが使われてない
0366デフォルトの名無しさん垢版2017/01/08(日) 20:32:30.74ID:BBb65MXo
GASでローカルのtxt、たとえばc:\\test.txtなんかをスプレッドシートに展開したいのだけれど
csvを展開するスクリプト(https://github.com/prog-mitsu/importCsv
をいじくりまわしてもどうもうまくいかない

このスクリプトだと、フォームが表示されるのだけれど
フォームの表示なしで、固定のテキストファイル(たとえばc:\\test.txt)を展開することって
GASではむりなんかいな?
0368366垢版2017/01/09(月) 07:41:00.04ID:kW/T2j6A
>>367
早速の返信ありがとうございます
いろいろ調べましたが
http://tokidoki-web.com/2013/08/file-api%E3%81%A7%E3%83%AD%E3%83%BC%E3%82%AB%E3%83%AB%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E6%83%85%E5%A0%B1%E5%8F%96%E5%BE%97%E3%81%97%E3%81%A6%E3%82%84%E3%82%93%E3%82%88/
にあるとおり

>セキュリティの問題上でパスを「C:\file.txt」や「../text/file.txt」の様に指定してファイルを書き直す事はできません。

との状況です
0369デフォルトの名無しさん垢版2017/01/09(月) 10:02:02.53ID:/7U8UXhW
ローカルのものをGoogleDriveにupしたあと
それをGASで開くんだよ
0370366垢版2017/01/12(木) 21:41:52.77ID:35gbmkUr
>>369
その、「ローカルのものをGoogleDriveにup」をフォームなどの表示なしに自動化したいのです
0373デフォルトの名無しさん垢版2017/02/02(木) 07:52:54.77ID:hDfY8PDB
半年ほど前にお世話になった者です

スプレッドシートでimportdata関数を使っていたんですが
Loading......が頻発するので、やはりGASで対処したいのです
データ取得までは出来てると思うのですが、シートに書き込む段階が全くおかしいようで・・


function fetchData(){
var response = UrlFetchApp.fetch("http://hesonogoma.com/stocks/data/japan-all-stock-prices";);
var json = response.getContentText();
var kakaku = JSON.parse(json);

var range = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getRange(1, 1);
range.offset(0, 0, 6000, 26).clear();

for(var i=0; i<kakaku.length; i++) {
var event = kakaku[i];

range.offset(i+1,0).setValue(event);
}
}

正解か、参考になるサイトをご教授いただきたいのです
色んなサイトのコード切り貼りしすぎて、頭がおかしくなってきたw
0374デフォルトの名無しさん垢版2017/02/02(木) 12:56:10.24ID:Y5kXFMjA
アクセス権は?
0375373垢版2017/02/03(金) 06:23:34.32ID:HRggU1Ve
>>374
仕組みがよくわからないんですが、
ログにはデータ表示されるのでアクセスは出来ているはず・・・

・・もしかしてアクセス権というのは違法性の問題とかですか!?
すみません、だったら質問とりやめますが
0376デフォルトの名無しさん垢版2017/02/03(金) 08:05:00.39ID:HRggU1Ve
色々やってみたら一応なんとかなりました
1年ちょいのモヤモヤが一気に解消して、いま涙目になってますウォォ

ありがとうございました!
0378デフォルトの名無しさん垢版2017/02/15(水) 00:43:00.46ID:8OzNcjl5
エラーのメールいっぱいくるからトリガー止めようと思っても保存押したらサーバーエラーになっちゃう
0379デフォルトの名無しさん垢版2017/02/15(水) 13:37:01.14ID:8OzNcjl5
"サービスで1日に使用しているコンピュータ時間が長すぎます”っていうエラー出るだけど
どういうエラーか分かりますか?
なにもいじってないのに昨晩から急に出るようになった
0383379垢版2017/02/19(日) 12:34:42.66ID:I5IVz31O
1日止めて何も変えずトリガー元に戻しましたが、今のところ問題無し
数は減らしましたがペースは変えず
0384デフォルトの名無しさん垢版2017/02/27(月) 17:20:09.61ID:D6mIqUvN
Spreadsheetで行の非表示/表示はsheet.hideRow(rowIndex)/sheet.unhideRow(rowIndex)ですが、
ある行が非表示であるかどうかはどのように確認できますか?
0385デフォルトの名無しさん垢版2017/03/02(木) 18:37:21.00ID:ZV5SMkF2
visible
0386デフォルトの名無しさん垢版2017/03/09(木) 00:32:07.05ID:JhFIW3VD
>>385
ありがとうございます。それってどのクラスから生えてますか?
一応、下のようになってみましたができませんでした。
sheet.getRange(1, 1).visible
0389デフォルトの名無しさん垢版2017/03/11(土) 14:16:44.62ID:QRqRtZxP
>>388
ありがとうございます。確かにそのページによるとサポートされてなさそうですね。
stackoverflowでいくつかの同様な質問を見つけましたが、できない的なことが書かれてました。
visibleの件ももう少し調べてみて、できそうになかったら諦めます。
0390デフォルトの名無しさん垢版2017/03/26(日) 23:38:49.69ID:bKMbQXbX
var triggerUniqueId = ScriptApp.newTrigger("doPost2")
.timeBased()
.after(100)
.create()
.getUniqueId();

これを実行すると以下の3パターンの動作になるのだがなんとかならないかな?
・すぐにdoPost2に飛んでくる
・数秒〜数十秒後にdoPost2に飛んでくる
・どんだけ待とうがdoPost2に飛んでこない(何分か待ってれば飛んでくるのか?)

ちなみに飛んでこなかった場合は全てのトリガを削除してからやり直してる。
0391390垢版2017/03/27(月) 00:25:00.99ID:0WjH3gBI
微妙に勘違いされそうな書き方だったので追記

doPost2に飛んできたときはその中でトリガを削除しているので
「飛んでこなかった場合は全てのトリガを削除してからやり直してる。」ということです。
0392デフォルトの名無しさん垢版2017/03/27(月) 01:50:47.06ID:R2ENwT8H
100ms後にdoPost2に飛ばしたいってこと?
最終的になにがしたいかわからん
そのidでなにすんの?
0394デフォルトの名無しさん垢版2017/03/27(月) 08:47:26.49ID:VebtMPKj
目先の目的は「指定した時間後にdoPost2を実行したい」です。
100msが1秒になるにはまだ許容範囲ですが、
さすがに数十秒後やかなり待っても飛んでこないのはなにか設定がおかしいのかなと。
0396デフォルトの名無しさん垢版2017/03/27(月) 23:05:58.94ID:8SS48vh4
大雑把に以下のような流れになるのでsleepでは無理っす。
1, PayPalからPOSTがくる
2, PayPalにHTTP 200を返す
3, PayPalにPOSTを投げる
https://developer.paypal.com/docs/classic/ipn/integration-guide/IPNIntro/

function doPost(e) {
 トリガ仕掛ける
 HTTP 200を返す
}
function doPost2() {
 POSTを投げる
}

いろいろ試したけど60秒とか大きな値ならそれっぽいタイミングでトリガがかかるみたい。
短すぎる設定時間はダメなのかなぁ。
0397デフォルトの名無しさん垢版2017/03/28(火) 08:44:43.71ID:o5IlqyIy
トリガの指定って分単位だった気がする
内部的にcronだから
○時ちょうどにトリガー仕掛けたくて試したけど無理で、59分にしかけて00秒まで待つって実装にしたことがある
非同期処理ができないから難しいかも
秒数は一定じゃないから、1分後にトリガー設定しても最大1分59秒後になることもある
にしても面倒な仕様だなPaypal
0398デフォルトの名無しさん垢版2017/05/05(金) 06:31:43.18ID:SiZHVQw5
VBAのCall ステートメントは、Google Apps Scriptの場合どう記述すればいいですか?
0400デフォルトの名無しさん垢版2017/05/14(日) 12:32:35.84ID:jKxGUXHj
アクティブシートのカーソルがあるセル(アクティブセル)の行番号を、別のシート(setei)のB1へコピーしたいのですが、
うまく行きません。
5行目のvar copyValue〜の値をmsgBoxで出力すると、希望通りの値が出ているので、そこまでは合っていると思うのでが、
6行目で取得した行番号を、別のシートのB1に入れる所で躓いています。解決方法を教えて頂けないでしょうか?

function myFunction() {
 var sheet = SpreadsheetApp.getActiveSpreadsheet();
 var sheet_copyFrom = sheet.getActiveSheet();
 var sheet_copyTo = sheet.getSheetByName('setei');
 var copyValue = sheet_copyFrom.getActiveCell().getRow();
 sheet_copyTo.getRange('B1').setValues(copyValue);
}
0404デフォルトの名無しさん垢版2017/05/21(日) 21:07:56.13ID:UO8/oZl+
質問です。

スプレッドシートのシートを並び替えることはできますか?
セル範囲のデータならSORTでできることは知っているのですが、シートには使えませんよね。

日付がシート名になってて、それを昇順に並び替えしたいのです。
よろしくお願いします。
0406デフォルトの名無しさん垢版2017/05/22(月) 16:43:39.47ID:j0GB+9U0
IDかわりましたけど404です。
>>405
めんどくさい方法ですけど、一応自分で作ってはみました。
これよりいい方法があるのか、改めてお知恵をお貸しください。

var ss = SpreadsheetApp.openById(file.getId());
var sheets = ss.getSheets();
// シート名(yyyyMMdd形式)で昇順ソート
sheets.sort(function(a, b){
var aa = Number(a.getSheetName()) || a.getSheetName();
var bb = Number(b.getSheetName()) || b.getSheetName();
if (aa < bb) return -1;
if (aa > bb) return 1;
return 0;
});
// 別スプレッドシートにコピー
for (var n in sheets)
{
var sheet = sheets[n];
var sheetName = sheet.getSheetName();
sheet.copyTo(sortedSs).setName(sheetName);
}

同じスプレッドシートでの並べ替えを諦めて、別スプレッドシートにソート済みをコピーしたってだけのものです。
0408デフォルトの名無しさん垢版2017/05/23(火) 20:48:03.04ID:RApg7j5+
>>407
4. シートを移動

これができなくて悩んでたんですが
SpreadsheetオブジェクトにinsertSheetメソッドやmoveActiveSheetメソッドがありますね。
何とか実装できそうです。
ありがとうございました。
0409デフォルトの名無しさん垢版2017/06/23(金) 10:37:10.09ID:0OdP20aK
0410デフォルトの名無しさん垢版2017/06/25(日) 21:20:03.77ID:xjvWfy2S
getValuesで取得した二次配列の、あるインデックス番号Ary[n][n]から、セル番号を取得するにはどうすれば良いでしょうか?
又、それはAPIを使わず、javaの配列処理の中で完結できるものなのでしょうか?
0412デフォルトの名無しさん垢版2017/06/26(月) 11:16:36.54ID:H+izVTcm
modは義務教育で教えるべきだな
0413デフォルトの名無しさん垢版2017/06/26(月) 15:45:17.47ID:Zgx9U3+p
gasなのかわからないですが、間違いならすみません。
フォームで@郵便番号を入れたら住所の一部を表記させたいのですが、できるのでしょうか?
A特定の数字をいれたら、外部からその数字に該当するデータを引っ張れるでしょうか?(社員コードいれなら社員名がでるイメージです)
誠にすみませんが、可能ならばご教授
おねがいします。
gasはさわったことないので、できそうならば、やってみたいとおもいます。
0414デフォルトの名無しさん垢版2017/06/26(月) 20:44:30.70ID:iMKCKa0h
>>413
1.できます
2.できます
3.ajax
0415デフォルトの名無しさん垢版2017/06/26(月) 21:07:30.37ID:YNcumjCY
>>414
おしえてくださいばっかりでもうしわけありませんが、本当に素人でして。
コードやら参考のURLでもありましたらおねがいします。
レスを投稿する


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