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/
0597デフォルトの名無しさん
垢版 |
2019/05/08(水) 22:37:52.06ID:v2zfKxp6
フォームと連携されたシートをアレコレ弄るのはあんまりオススメしない
別シートにその形になるようにスクリプト組めば?
0598デフォルトの名無しさん
垢版 |
2019/05/13(月) 00:46:09.37ID:31F8kOtz
前職を退職してしばらく経過している、VBAとPHPしかできないウンコちゃんなんですけど、
これから勉強するならVBAとGASどっちがおすすめですか?
中小企業でのGSuiteの普及具合ってどう?
0599デフォルトの名無しさん
垢版 |
2019/05/13(月) 07:51:29.08ID:UqvxTptL
知らんがな
まぁjavascriptと同じ感じだからGAS覚えとけば
使う機会あるか知らんが
0601デフォルトの名無しさん
垢版 |
2019/05/15(水) 20:51:09.77ID:UMUjFXwO
もしかして、スプレッドシートって、テキストボックス配置出来ない?
ボタンを押したときに、テキストボックスに入れた値を引数にしてGAS実行とか無理?
0602デフォルトの名無しさん
垢版 |
2019/05/16(木) 11:37:04.16ID:Ox4fjiQE
きみにはむり
0604デフォルトの名無しさん
垢版 |
2019/05/16(木) 22:27:53.89ID:aE3zz80C
あ、ごめん、Excelレベルのやつ。
下手に触ると、変形したり消えちゃったりする、
図形のじゃなくて。
0605デフォルトの名無しさん
垢版 |
2019/05/16(木) 22:52:16.37ID:M/iLkUxO
セルじゃあかんのか
0606デフォルトの名無しさん
垢版 |
2019/05/16(木) 23:54:06.79ID:aE3zz80C
セルだと、「ここに値を入れるんだぞ」って感じじゃないので。

なんて言うか、例えば格子状に線が引かれている方眼紙みたいな年賀はがきがあって、
そこに住所とか氏名書いたら、物凄く萎えると思うの。
0608デフォルトの名無しさん
垢版 |
2019/05/17(金) 09:29:57.48ID:Eosg7Npq
まずSpreadSheetにその機能があるのか?
テキストボックス付きのExcel表を変換したらどうなる?
0610デフォルトの名無しさん
垢版 |
2019/05/18(土) 10:19:31.77ID:wL0pdwUB
HTML ServiceとUI使えばダイアログボックスやサイドバーに
htmlを使ってテキストボックスやボタンとか表示させることができるよ
0616デフォルトの名無しさん
垢版 |
2019/05/21(火) 22:07:00.33ID:Jja3BPK6
>>611
getIdのドットの前のオブジェクトは何?
それ次第

getEventIdはカレンダーイベントオブジェクトでしょ?
だからカレンダーイベントのidが取得できる
0617デフォルトの名無しさん
垢版 |
2019/05/21(火) 22:07:54.48ID:Jja3BPK6
>>611
getEventByIdだったw
イベントidでイベントを取得するメソッドだね
0618デフォルトの名無しさん
垢版 |
2019/05/22(水) 22:43:46.56ID:bxcYYOqD
>>617
カレンダーイベント配列のgetId。
だから、何でカレンダーイベントのIdを取得できるのがもう一つあるのかなと。
しかも取得結果が違うし。

getIdは、長い暗号 + メールアドレスみたいな文字列が返ってくるけど、
getEventByIdは、全然違う文字が返って来たり、空だったりする。
0619デフォルトの名無しさん
垢版 |
2019/05/23(木) 03:29:55.06ID:4J3/T4Xu
sheet.getRange().sort(column);

の様な処理で column 列が式の場合、式の文字列でソートされますが
この関数は演算結果に対して行う手法はあるのでしょうか?

無いようなら getDisplayValues で配列に取り込み、
放り込みなおして sort するのが比較的手数が少ない方法ですかね?
0621デフォルトの名無しさん
垢版 |
2019/05/23(木) 14:01:08.81ID:4J3/T4Xu
検証不足で他の要因で一部にソート異常があったので思い込みにはまってました、お恥ずかしい
0622デフォルトの名無しさん
垢版 |
2019/06/06(木) 07:53:11.68ID:0GC4e250
スプレッドシートでExcelのマクロみたいなことをしたいのですが
オススメの参考書などありますでしょうか?
0623デフォルトの名無しさん
垢版 |
2019/06/06(木) 22:33:31.61ID:17p7tBKQ
ググって調べるのが一番だと思うけど。
俺も欲しかったので、Amazonで調べたけど、
内容がすぐに陳腐化するらしい。
アップデートが頻繁なのも善し悪しだな。
0624デフォルトの名無しさん
垢版 |
2019/06/08(土) 17:29:30.36ID:h5srjJt3
Javascriptの基礎的な言語知識と
GAS独自のオブジェクト
たとえばスプレッドシートなら
Spreadsheet, sheet, rangeなどが分かればある程度のものは
組めるようになると思う
0625デフォルトの名無しさん
垢版 |
2019/06/16(日) 20:09:51.82ID:ZtozgK8X
gmailの着信をトリガーにする方法はありますか?
今は1分間隔でスクリプトを動かしてるんだけど、
たまに経過時間でエラーがでちゃうので、1分間隔は厳しいのかなーとか。
0626デフォルトの名無しさん
垢版 |
2019/06/17(月) 10:59:46.44ID:lxO8a0KV
定期的に自動で再起動するスクリプトにしろ
0627デフォルトの名無しさん
垢版 |
2019/06/19(水) 00:49:14.23ID:HMJH3ram
質問なのですが、

1・スプレッドシートにボタンを作る(挿入→図形描画で作りました)
2・そのボタンにツール→スクリプトエディタで書いた、簡単なgasを紐つける

これでPCのブラウザからはボタンをクリックすると、ちゃんとgasが何の問題もなく正常動作するんですが
スマホのスプレッドシートアプリから同シートを開いてボタンをクリックするとgasが全く動きません

エラーも出ず、ボタンオブジェクトがクリックされた状態(D&Dでオブジェクトを移動できる状態)になるだけです

もしかして、gasはスマホのスプレッドシートアプリからは動作しなかったりしますか?

なお、書いたgasは以下です

function addTuujouKinmu() {
var sheet=SpreadsheetApp.getActiveSheet();
var x=sheet.getRange("D14").getValue(); //現状の通常勤務日数を取得

sheet.getRange("D14").setValue(x+1); //ボタンがクリックされたら勤務日数+1
}

よろしくお願い致します
0629デフォルトの名無しさん
垢版 |
2019/06/19(水) 14:23:03.68ID:HMJH3ram
>>628
なぜかスマホのブラウザからでも編集、gasの動作しないです
どうも閲覧専用アカウントのような、閲覧しかできない状態になっているように見えます

ブラウザはios版GoogleChromeで、グーグルアカウントはこのシートとgasを書いたオーナーアカウントでログイン済みです
PCブラウザで同アカウントでログインして、gasの正常動作とシート編集などできる事を確認しているアカウントです

スプレッドシートのgasが、アプリはブラウザでもスプシアプリでも何でもいいので、
スマホで動作している方いらっしゃいませんでしょうか?
0633デフォルトの名無しさん
垢版 |
2019/07/26(金) 10:10:58.05ID:ycINWf6e
馬鹿には無理
0634デフォルトの名無しさん
垢版 |
2019/07/27(土) 23:05:56.23ID:8PWCZyQY
>>632
トリガーあるじゃん
0635デフォルトの名無しさん
垢版 |
2019/07/29(月) 00:59:59.45ID:Dem7abun
トリガーも使ってます、定期送信用に。
ただ、不定期にspreadsheets上で複数宛先に一括送信する場合、毎回宛先も内容も違うので、念のため事前にgmail上でチェックしたいのです。
0638デフォルトの名無しさん
垢版 |
2019/09/12(木) 20:34:14.26ID:hHaUU8VW
そうだね
0639デフォルトの名無しさん
垢版 |
2019/09/12(木) 20:36:48.23ID:hHaUU8VW
でもES5の仕様がほとんど使えないから
ちょい古めのJavaScriptで書くことになる
0640デフォルトの名無しさん
垢版 |
2019/10/04(金) 01:45:57.83ID:zbpSxYO6
ドキュメントにあるデータ名・URL・オーナー名・作成日・更新日を一覧化したいんだけど、指定したオーナーのデータのみ吐き出したい。
これってできる?
0641デフォルトの名無しさん
垢版 |
2019/10/04(金) 15:10:08.55ID:JXWhYfPM
どうして出来ないと思ったの?
0642デフォルトの名無しさん
垢版 |
2019/11/01(金) 14:08:33.21ID:NFOS1XEp
スプレッドシートのonOpenで自分のホルダー名知りたいのですがdriveappの一部が仕様でエラーになります。何か裏技無いでしょうか?
0643デフォルトの名無しさん
垢版 |
2019/11/01(金) 17:12:50.47ID:ep+Mqrpb
自己解決、onOpenじゃなくて現在のプロジェクトのトリガーでスプレッドシートの起動時にvoldの関数を実行すると登録したら動きました。擬似的なフォルダ構造でやれそうです。
0644デフォルトの名無しさん
垢版 |
2019/12/22(日) 20:08:35.90ID:euY4U9Rb
スプレッドシートの内容をカレンダーに自動追加するスクリプトを素人ながら作りましたが、
いわゆるAPIの呼び出し過多で実行時間が11-14秒かかります。
短縮するにはどのように書き直せばいいかご教示いただけないでしょうか。

function CreateEventfromSheet() {
var sheet, i, event, date, added;
sheet = SpreadsheetApp.getActiveSheet();
for(i = 2; i <= sheet.getLastRow(); i++) {
added = sheet.getRange(i, 16).getValue();
if(added == "") {
event = sheet.getRange(i, 11).getValue();
Logger.log(event)
date = sheet.getRange(i, 12).getValue();
Logger.log(thedate)
thisevent = CalendarApp.getCalendarById("*****")
.createAllDayEvent(
event,
date
);
sheet.getRange(i, 16).setValue("done");
}
}
}
0648デフォルトの名無しさん
垢版 |
2020/01/01(水) 00:53:00.78ID:DBz6lwN3
>>644
結果を入力するとことか無駄あるけど、こんな感じかな
ポイントはシートにセットする値は二次元配列にしないとだから、resultにpushするときに配列として渡してあげるとこ
ただカレンダーの予定を入力するのは結局一つずつだから、大量に入れると遅くなるのは仕方ないかも

A列 タイトル
B列 日付
C列 イベント作成したかどうか


function sample() {
var sheet = SpreadsheetApp.getActiveSheet();
var calender = CalendarApp.getCalendarById('####');
var data = sheet.getDataRange().getValues();

// カレンダーへのセットの結果を格納する配列
var result = [];
data.forEach(function(value){
if(value[2] === ''){
var title = value[0];
var date = new Date(value[1]);
calender.createAllDayEvent(title, date);
result.push(['done']);
}else{
// すでにセットされている予定は更新しない
result.push([value[2]]);
};
});
sheet.getRange(1, 3, result.length, 1).setValues(result);
}
0650644
垢版 |
2020/01/01(水) 16:06:51.26ID:Xdbev+rH
あけましておめでとうございます。
>>645,>>648
ありがとうございます。
結果的に下記内容で実行時間を1カレンダー入力を2秒未満に済ませることができました。
カレンダー追加済と日付の指定を探しに行く範囲を限定しただけですが...
前提となるシートの内容が、
上から順に案件番号(3列目,C列)と案件名(10列目)は振られるものの、
カレンダーへの反映は予定日(11列目)が決まり次第のため、
入力済かの判定列(15行目)は途中で空欄が含まれるものでした。

>>648の内容をすることを正月休みの宿題にすることにします。
0651644
垢版 |
2020/01/01(水) 16:07:06.72ID:Xdbev+rH
function CreateEventfromSheet2() {
var sheet = SpreadsheetApp.getActiveSheet();
var lastRow = sheet.getLastRow()
var columnC = sheet.getRange('C:C').getValues();
var lastRowC = columnC.filter(String).length;//案件番号の最終行
Logger.log(lastRowC)

for(var i = 2; i <= lastRowC; i++) {
var added = sheet.getRange(i, 15, lastRowC, 1).getValue();//カレンダー追加済か
var thedate = sheet.getRange(i, 11, lastRowC, 1).getValue();//予定日が入力されているか
if(added == "") {
if(thedate !==""){
var event = sheet.getRange(i, 10).getValue();
Logger.log(event)
thisevent = CalendarApp.getCalendarById("****")
.createAllDayEvent(
event,
thedate
);
sheet.getRange(i, 15).setValue("done");//追加済とする
}
}
}
}
0652デフォルトの名無しさん
垢版 |
2020/01/15(水) 22:19:02.47ID:22NAEhTT
GASに、VBAのAdvancedFilter相当の機能はありますか?
ORとANDの組み合わせが自由自在のやつ。
0655デフォルトの名無しさん
垢版 |
2020/01/16(木) 23:53:39.30ID:zIX3nnAn
クエリ?
自シート内でフィルタではなく、他シート(または別範囲)に書き出す感じですか。
0656デフォルトの名無しさん
垢版 |
2020/02/25(火) 14:03:43.81ID:eF9AatYa
apps scriptでCSV読み込んでそれをgoogleドキュメントに差し込みしてそのあと印刷したいってできる?
0657デフォルトの名無しさん
垢版 |
2020/02/25(火) 15:37:53.26ID:FzVRg2bh
ok
0658デフォルトの名無しさん
垢版 |
2020/02/26(水) 14:11:00.74ID:OdP3ovVD
app script初回に他のアクセスするファイルの許可って途中からでも許可できるファイル増やせる?
0660デフォルトの名無しさん
垢版 |
2020/03/04(水) 19:02:19.80ID:DcIeIIMH
豚切りスマソ

ファイル名の同じpdfファイルを毎月同じ日にダウンロードして、Googleドライブに保存したいんだけど、そんなことできる?

例えばこれ
https://www.mizuhobank.co.jp/market/pdf/mid/midcba.pdf
0663デフォルトの名無しさん
垢版 |
2020/03/07(土) 10:04:47.92ID:M14eFJOx
GASで他人が作ったライブラリを追加したのですが、その内容を確認する方法はあるのでしょうか?あるのでしたらその方法を教えていただきたいと思います。

Twitterに投稿をするアプリの紹介している同人誌があり
Authを設定してそのライブラリに渡すことで実現しています。

ただ、そのライブラリは作者が開発したのもですので、
抜き取られていないかどうかを確認したいと思っています。
0664デフォルトの名無しさん
垢版 |
2020/03/07(土) 15:43:27.49ID:QH/1z6a5
今日初めてスプレッドシートでスクリプトを書き始めたド初心者です

変数にちゃんと値が入ってるか確認するためにLogger.log()でこまめにログを開くんですが、ログ表示にすごく時間がかかったり、スクリプトの中間辺りのLogger.log()だけ表示されていたりします

10〜20秒位待ってログを開き直すとちゃんと表示されるのですが、毎回待たされるのが地味にストレスです
素早く正しく表示させる方法はありますか?
ちなみに変数に値を入れて、その中身を表示させるだけのシンプルなものでもそれなりに待たされます

あとログウィンドウを移動させる際に、ウィンドウを持てる箇所の当たり判定が小さいのと、マウスカーソルが矢印から手に変わらないから、なかなか一発で動かせないのと、動かしたところでスクリプト画面にフォーカスしないからスクロール出来ないのも憎しみポイントですね
0665デフォルトの名無しさん
垢版 |
2020/03/08(日) 00:48:31.73ID:5hjyLnS+
>>664
新しいエンジンが供用開始になったばかりなのでまだ buggy かも
ログ表示は旧エンジンを使えばすぐ表示される

あんまり回答になってないが
0666デフォルトの名無しさん
垢版 |
2020/03/09(月) 10:51:06.63ID:p6Z1SMlj
>>663
その作者が公開設定してなきゃ確認する手段はない

有名どころのライブラリは公開してるのがほとんどだから、あやしいマイナーライブラリ使うより有名なTwitterライブラリ使ったら?
0667デフォルトの名無しさん
垢版 |
2020/03/09(月) 11:19:24.38ID:ZzLE3RUo
>>665
ありがとう
ログ表示快適になりました
0668デフォルトの名無しさん
垢版 |
2020/03/10(火) 21:35:41.05ID:ZDCF6+eP
>>666
理解しました。アドバイスもありがとうございます。

有名なTwitterライブラリを探してみたいと思います。
0669デフォルトの名無しさん
垢版 |
2020/03/12(木) 00:07:44.47ID:Ajw/pKZ3
>>667だけど追加で報告
V8エンジンをオフにしてると、includesって命令使った時だけエラーが出ます

if(!ran.includes(temp)) こう書いてある行でエラーになるけど、V8オフにすると問題無し
ranもtempも直前でログ表示してますが、中身に問題はありません


そしてまた質問なんですが、
特定のセルを変更した時だけスクリプトを走らせる事は出来ますか?

onEditだとどのシートのどのセルいじってもファンクション呼んじゃう
A1のセルでファンクションA、B1ならBを呼ぶ
あるいは
セルA1のプルダウンがAならA、BならBみたいにして、スマホからでも動かしたいんです
各シートは普通に手入力で修正追加する表計算として使いたいので、いちいちファンクション呼んでたらサーバーが地獄です

htmlと絡めてwebアプリ的にするしか無いんですかね?
0670デフォルトの名無しさん
垢版 |
2020/03/12(木) 01:52:13.27ID:cgiY/N73
>>669
includesはもとのGASではArrayオブジェクトにないからエラーになるのが通常動作
V8とオブジェクト単位で使える使えないがそもそも違うので、少しはリファレンス読んだ方が良いよ
0671デフォルトの名無しさん
垢版 |
2020/03/12(木) 13:27:32.42ID:j9jxQsAx
>>669
モバイル端末からはそもそもコンテナバインド型GASは実行できない
規約なり制限をきちんと読め
0672デフォルトの名無しさん
垢版 |
2020/03/12(木) 15:12:36.46ID:Aj8VN0Uo
GASファイルを他の人にアップすることって可能?
0673デフォルトの名無しさん
垢版 |
2020/03/13(金) 18:14:34.70ID:5AsLHuse
スプレッドシートに紐づけしたGASって他のスプレッドシート参照できないんだな
いい勉強になったわ、自動化する時はGAS単独で作るしかないな
0674デフォルトの名無しさん
垢版 |
2020/03/13(金) 18:40:07.18ID:cgyHyg3G
excelの何でもできる、痒いところに手が届くに慣れてると
Googleスプレッドシートには絶望しかない
0677デフォルトの名無しさん
垢版 |
2020/03/14(土) 01:13:49.59ID:UZOR73gH
>>673
できるでしょ
0678デフォルトの名無しさん
垢版 |
2020/03/14(土) 01:18:50.24ID:UZOR73gH
>>674
どこまでいってもOpenDocument派生だからExcelより同じ派生のLibreOfficeにあるCalcが近しいから仕方ないかと
0679デフォルトの名無しさん
垢版 |
2020/03/14(土) 03:57:51.59ID:B3THKCTN
>>677
いややってみたけど無理だったよ、スプレッドシートに紐づけしてるマクロの中で他のスプレッドシート開こうとしたら怒られたし権限がないって
0680デフォルトの名無しさん
垢版 |
2020/03/14(土) 04:45:08.26ID:B3THKCTN
>>679
このコメントは間違いだった、ちゃんとアクセスできたわ
謝罪しておきます、スペルミスしてたのかなあopenByidでミスったか・・・
0681デフォルトの名無しさん
垢版 |
2020/03/14(土) 15:29:14.23ID:UZOR73gH
>>680
変更履歴から直近の変更点は確認できるし、今後も同じような事にならんようになにが原因でできてなかったのかは明確にしとくと自分自身のために良いよ
0683デフォルトの名無しさん
垢版 |
2020/03/23(月) 12:05:18.59ID:Y7MCXH01
cat テキスト | grep hogehoge 相当は
テキスト.match(/.*hogehoge.*/g);
でよさそうなのですが
grep -v hogehogeに相当するのをGASでどう書けばいいのかわからないのですが、
どなたか教えてもらえないでしょうか
0684デフォルトの名無しさん
垢版 |
2020/03/23(月) 12:47:32.23ID:jGS2rL5b
Ruby なら、

text = <<"EOT"
abc
あいう
xyz
EOT

re = /あい/

text.each_line do | line | # 1行ずつ処理する
line.strip! # trim

puts line unless line.match( re ) # マッチしなければ
end

出力
abc
xyz
0686デフォルトの名無しさん
垢版 |
2020/03/23(月) 23:19:42.98ID:dwpdUDvb
VBAスレで相手にされなくなったからって、GASスレまで出向いてこないでくださいな。
0687デフォルトの名無しさん
垢版 |
2020/03/24(火) 11:22:47.32ID:JQ7YmFwi
そろそろ潮時
0688デフォルトの名無しさん
垢版 |
2020/04/03(金) 23:41:32.27ID:r3V2xUir
GAS極めようと思ったら、google cloud platformは必須かな?
0690デフォルトの名無しさん
垢版 |
2020/04/06(月) 10:04:22.06ID:o3kGovlh
GCPとGASは別物
GCP使っててもGASは使わん事のほうが多い、逆も同じ
0691デフォルトの名無しさん
垢版 |
2020/04/07(火) 00:19:15.67ID:yujFP2M7
GASでTwitterbot連動して投稿とかもうわけわかんねえ〜
0692デフォルトの名無しさん
垢版 |
2020/04/07(火) 01:50:45.93ID:JEfC632I
>>691
GASでInstagram連携はめんどうだけど、Twitter連携は楽だろ
0693デフォルトの名無しさん
垢版 |
2020/04/07(火) 03:46:14.96ID:yujFP2M7
何故かツイートコメントに改行コード入れても改行されないし投稿時間は毎回変える感じだったら、改行なんてツイッターの中で何が改行コードなのかわからねえし参考になる記事見て同じコードで解決にならなかったわ
0694デフォルトの名無しさん
垢版 |
2020/04/07(火) 08:11:25.19ID:d1kIoLlr
>>693
TwitterのTweetで渡す文字は一般的な改行コードしか存在しない
特別なものなんて使われてないから単純に文字列操作できてないだけかと
0695デフォルトの名無しさん
垢版 |
2020/04/07(火) 12:51:23.32ID:yujFP2M7
>>694
なるほど、\nで改行したいって言ってたけど理論上無理だったのか
0696デフォルトの名無しさん
垢版 |
2020/04/07(火) 13:31:44.40ID:fttEuirm
馬鹿には無理
レスを投稿する


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