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/
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);
}

同じスプレッドシートでの並べ替えを諦めて、別スプレッドシートにソート済みをコピーしたってだけのものです。
0407デフォルトの名無しさん
垢版 |
2017/05/22(月) 22:49:33.07ID:Bx+b+qt8
1.シート数を取得
2.全シート名を配列へ
3.配列をソート array.sort()
4.シートを移動
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でもありましたらおねがいします。
0417デフォルトの名無しさん
垢版 |
2017/07/05(水) 17:50:45.17ID:aOT9LPA2
/**
* @return ライブラリ名
*/
とやっているのに返り値のメソッド補完が効きません…
何か間違っているでしょうか…
0419デフォルトの名無しさん
垢版 |
2017/07/05(水) 19:25:23.18ID:aOT9LPA2
>>418
コメント付けると補完が効くようになると聞きました
0422デフォルトの名無しさん
垢版 |
2017/07/12(水) 23:56:43.84ID:zDi+fEh9
外部サイトで申し訳ないのですが、GASについて下記のサイトのチュートリアルを試していたのですが
ttps://tonari-it.com/gas-web-appli-spreadsheet-append/
真似をしてみても、エラー出てしまいます。

getActiveSheet を呼び出す権限がありません(行 2、ファイル「test2」、プロジェクト「HTMLページ表示」)

自分のコードが間違えたのかと、コードをコピペしたり、スクリプト認証を再度許可を出すために
現在とは別にファイルを作り直したりしたのですが、同じエラーが出てしまいます。
このエラーを回避するにはどうすれば良いでしょうか?
0424422
垢版 |
2017/07/13(木) 13:30:04.56ID:7vUNc/rI
すみません自己解決しました。
原因はスクリプトにプロジェクトのトリガーを設定していなかったことが原因だった様です。

公開済みのHTMLなのでアクセスすれば良いだけでなのに、なんでや!と思っていたのですが、
googleのwebアプリの場合、公開時にアサインされるHTMLへのリンクは、実はHTMLへのリンクではなく、
リンク > Ajax > .gs > html という流れらしく(たぶん)
3番目の.gsにトリガーが設定されてないとダメという感じの様です。なので.gsのトリガー設定した所動きました。

[設定したトリガー]
実行:doGet
イベント:スプレッドシートから・起動時に設定

このトリガー自体適当に設定したので、spreadsheetに紐付いた(コンテナバウンド)webアプリがこのトリガーで本当に良いのか?
.gsがスタンドアローンだったらどうするのか?などは自分の知識ではまだ不明です。
割と有名(みんなが引っかかる)ワナらしく、「GAS 実行する権限がありません」でググると色々出てきます。
0426デフォルトの名無しさん
垢版 |
2017/09/26(火) 05:38:02.61ID:uiCOOs0C
ぐぐってきたけど、ここそんなに人気ないの?
0428デフォルトの名無しさん
垢版 |
2017/09/26(火) 19:33:58.52ID:vmZLMK5C
すみませんが質問させてください。

現在、google appsのみで簡易ウェブアプリの制作を試みています。

構成は
htmlservice+gas+spredseet(DB)
です。

各種申請をweb化するのですが、アクセスしたユーザーのgmailアドレスもDBに格納します。
session.getactiveuser().getemailを利用するため、スクリプトの実行者は「アプリケーションアクセスしているユーザー」にしています。
そうすると、spreadsheetも全員に公開する必要がありますが、spreadsheetの中身は個人情報を少し含むため見られたくありません。

なにかいい方法はありますでしょうか、、、fusiontablesなどであればできるのでしょうか?
0430デフォルトの名無しさん
垢版 |
2017/09/27(水) 13:03:25.12ID:Is6BRq5M
>>429
ご助言ありがとうございます。
propaties serviceについて調べた見ましたが、ユーザープロパティとして保存した場合、他のユーザーからは一切アクセスできないものと思いました。

一部のユーザー(システム管理を行う数名)に対しては、データの参照ができるようにしたいと思ったおります(申請されたデータを承認するようなワークフローアプリを検討しているため。後出して申し訳ありません)
0431デフォルトの名無しさん
垢版 |
2017/09/27(水) 14:45:10.73ID:/heCrwKp
サイズが十分小さければスクリプトプロパティかな。
たしか500KBくらいまで。

あるいは、スプレッドシートにスクリプトを付属させるんじゃなく、
独立プロジェクトにして、openByIdとかopenByUrlとかは?
0432デフォルトの名無しさん
垢版 |
2017/09/27(水) 15:36:25.01ID:Is6BRq5M
>>431
ご助言ありがとうございます。
プロパティについては、思いの外データの種類が増えそうなため難しそうです。

スクリプトをスタンドアロンにして、openbyidがいいですかね、万一idがバレてしまった時のことが不安ですが、そういったことは起こらないと思っていい感じでしょうか。
0434デフォルトの名無しさん
垢版 |
2017/09/29(金) 01:18:28.86ID:tHWOJPZ9
for (var i = 1; i <= ss.getLastRow() ; i++){
ss.getRange(x,y).setFormula('=IMPORTHTML("https://www.yahoo.co.jp";,"table"1+i,');
}

for分の中で関数の最後の部分を1ずつ足していきたいのですが、セルに出力された際は「i」の部分は数字としては見てくれません。
1つずつ足していく方法はありますでしょうか。
0435デフォルトの名無しさん
垢版 |
2017/09/29(金) 08:18:30.31ID:qX48jByc
>>433
ありがとうございます。
ライブラリ化するということでしょうか。
getEmailする部分を別アプリ(アプリにアクセスしているユーザー実行)にして、spreadsheet操作をするアプリはオーナーとして実行する感じでしょうか。
調べてみます。
0436デフォルトの名無しさん
垢版 |
2017/09/29(金) 11:06:26.65ID:/1pN5XFr
>>432
>そういったことは起こらないと思っていい感じでしょうか

マーフィーの法則というのがあってだな
そういう起こって欲しくないことは起こるんだ
0437434
垢版 |
2017/09/29(金) 11:38:46.26ID:tHWOJPZ9
自己解決しました。
ss.getRange(x,y).setFormula('=IMPORTHTML("yahoo.co.jp","table",1+'+i+')');
0438デフォルトの名無しさん
垢版 |
2017/10/27(金) 20:03:28.12ID:CxLsHkIL
googleドライブにアップしたエクセルxlsを自動でspreadsheetに変換するコードはありますか
0439デフォルトの名無しさん
垢版 |
2017/10/28(土) 10:08:42.77ID:w8au0uVc
すべてのシートで文字の一括置換をしたいのだけど、セル毎に処理するしかないのかな?
0440デフォルトの名無しさん
垢版 |
2017/10/28(土) 11:18:38.62ID:YrbVG7kU
>>438
pythonでダウソするやつはある
0441438
垢版 |
2017/10/28(土) 19:55:11.76ID:aeUdpVUN
>>440
検索してなんとなくできそうなのでやってみます
ありがとうございました
0442デフォルトの名無しさん
垢版 |
2017/11/12(日) 02:54:44.20ID:StX7DGK4
GAS単体でajaxのようなwebページをクローリングすることは可能ですか?
やっぱり外部を通さないと無理でしょうか
0444デフォルトの名無しさん
垢版 |
2017/11/13(月) 13:04:40.18ID:8/cIJ70S
スプレッドシートの制御をAndroidから行う方法をご教示頂けませんでしょうか。
内容としては複数列のソートを行いたいのです。
現状は列指定でソートをかけているのですが、列数が多く余分な時間がかかります。
PCからは実行できているのですが、同様の事がAndroid上から行えたらと思います。
実行用のトリガーがAndroidで使用できずに困っております。
現状トリガーは図形に対してスクリプト実行させていますが、タップしてもAndroidでは削除しか出てきません。
0447デフォルトの名無しさん
垢版 |
2018/01/03(水) 23:47:48.36ID:cEXvj/Pp
サーバー側でjqueryって使えますか?
WebスクレイピングのHTMLパーサとしてjqueryを使いたいのですが…
0448デフォルトの名無しさん
垢版 |
2018/01/04(木) 12:56:13.15ID:o7CttU7P
node.jsと思ったがGASか
0449デフォルトの名無しさん
垢版 |
2018/01/05(金) 01:26:13.05ID:GBYhvW0R
>>447
npmでjQueryをinstall
webpackでbundle
node-google-apps-scriptでアップロード
って感じでいけないかな?
試してないのでできるか分からないけど
0451デフォルトの名無しさん
垢版 |
2018/01/06(土) 11:51:13.98ID:HbY4/bGY
どっかよそのAPI使うとか
0452デフォルトの名無しさん
垢版 |
2018/01/07(日) 11:57:20.99ID:ez3NxZhX
Googleドライブにあるスプレッドシートを
JSONファイルを返すウェブアプリケーションとして使ってるんだが
JSONデータがブラウザにキャッシュされなくて困っている

cache-control:no-cache
pragma:no-cache
expires:Mon, 01 Jan 1990 00:00:00 GMT

というhttpヘッダを返してきてキャッシュさせてくれないんだが、
このヘッダを書き換える方法は無いか?

一ヵ月に1度、2度くらいしか更新されないデータだが、毎日頻繁に参照されるもので
データが1.4MBデカい為、変更されたときだけ読み込むようにヘッダを書き換えたい
0454デフォルトの名無しさん
垢版 |
2018/01/13(土) 02:09:46.21ID:Tg/TmElT
>>447
こないだ同じような用途でjsdomとjquery使ったわ。

たしかこんなかんじ
var JSDOM = require('jsdom').JSDOM;
JSDOM.fromUrl('https://example.com/').then(function(dom) {
var window = dom.window;
var jQuery = $ = require('jquery')(window);
// ここから$('ul#hoge > li.huga')とか普通に使えるはず
});
0457デフォルトの名無しさん
垢版 |
2018/01/29(月) 23:20:08.61ID:5eR4vC6L
constはランタイムエラー
letは通る
だったような記憶
0458デフォルトの名無しさん
垢版 |
2018/02/06(火) 22:16:05.06ID:/gHduiD+
addMenuでスプレッドシートに追加する独自メニューを条件によって選択不可にすることはできますか?
通常のメニューと同じようにグレーアウトして選択できないようにしたいです。
0459デフォルトの名無しさん
垢版 |
2018/02/10(土) 06:53:00.00ID:C1kfYYFU
1日1回、UrlFetchでページネイションされた数十ページを取得したいのですが
負荷軽減のため数秒は間隔を明けて取得したいです

settimeoutでエラーがでるのは、GASでは使えないということなのでしょうか?
出来ないとしたら代替方法の検索のヒントなどを教えていただきたいです
0462デフォルトの名無しさん
垢版 |
2018/02/13(火) 22:38:42.10ID:wCW429If
>>459
setTimeoutはブラウザでしか効かないんじゃ
Utilities.sleep(ミリ秒)使おう
0463デフォルトの名無しさん
垢版 |
2018/02/13(火) 22:39:52.24ID:wCW429If
>>458
非表示じゃダメなの?
0465デフォルトの名無しさん
垢版 |
2018/02/14(水) 12:43:37.10ID:qm6gWFGH
>>460
>>461
良し悪しはわからないけど

for (var n in datas) {
var data = datas[n];
...
}

とかしてた
0466デフォルトの名無しさん
垢版 |
2018/02/14(水) 16:40:58.15ID:rMSOrK/H
datum
0467デフォルトの名無しさん
垢版 |
2018/02/16(金) 06:23:37.77ID:W1XJdyx1
☆ 日本の、改憲を行いましょう。現在、衆議員と参議院の
両院で、改憲議員が3分の2を超えております。
『憲法改正国民投票法』、でググってみてください。国会の発議は
すでに可能です。平和は勝ち取るものです。お願い致します。☆☆
0468デフォルトの名無しさん
垢版 |
2018/04/06(金) 09:46:20.39ID:OGpTmhME
すみません、ちょっとお門違いなんですが、
Microsoft系でGoogle Apps Scriptに相当するようなサービスって何でしょうか?
0469デフォルトの名無しさん
垢版 |
2018/04/06(金) 12:08:48.32ID:sTfZcU1Y
OneDrive
0472デフォルトの名無しさん
垢版 |
2018/04/08(日) 11:45:51.95ID:YK+KPtHu
Python for Excel
0473デフォルトの名無しさん
垢版 |
2018/04/08(日) 12:44:04.55ID:x+tHn1VY
Google Spreasheetみたいにクラウドに置いたときに、
定期的に動かしたり、Webアプリとして呼び出せたりするんでしょうか?
0475デフォルトの名無しさん
垢版 |
2018/04/27(金) 12:00:12.58ID:DjfFcydV
できる
0478デフォルトの名無しさん
垢版 |
2018/04/27(金) 17:49:08.26ID:ash3pEtl
>>476
多分このスレの上の方に書いてある
0479デフォルトの名無しさん
垢版 |
2018/04/30(月) 09:57:45.45ID:OTdR2Ule
スプレッドシートでハイパーリンクになっていないセルの、テキストとURL取得するには、どうすれば良いですか?
0480デフォルトの名無しさん
垢版 |
2018/04/30(月) 21:10:05.12ID:k1zO9vV2
>>479
ハイパーリンクになってないならできない
そもそもセルにurlがvalueとして入力されてるなら別だが
0481デフォルトの名無しさん
垢版 |
2018/05/13(日) 17:28:07.61ID:T6Bs0Y7u
しょうもない質問ですが職場などで何て呼んでるでしょうか

ジーエーエス?
グーグルアップス?

こないだガスって言ってる人がいて自分の職場では全く統一されていないです
0482デフォルトの名無しさん
垢版 |
2018/05/13(日) 20:20:04.93ID:j+nJMGjP
>>481
ガスって呼んでる
??ってなる人には「Google Apps Scriptの略」って付け加える
レスを投稿する


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