【MACRO】Google Apps Script 質問スレ【DRIVE】

1デフォルトの名無しさん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/

417デフォルトの名無しさん2017/07/05(水) 17:50:45.17ID:aOT9LPA2
/**
* @return ライブラリ名
*/
とやっているのに返り値のメソッド補完が効きません…
何か間違っているでしょうか…

418デフォルトの名無しさん2017/07/05(水) 18:12:42.59ID:lervoDRk
それ、ただのコメントでは?

419デフォルトの名無しさん2017/07/05(水) 19:25:23.18ID:aOT9LPA2
>>418
コメント付けると補完が効くようになると聞きました

420デフォルトの名無しさん2017/07/05(水) 19:46:41.16ID:lervoDRk
波括弧で括ってないからかな?

421デフォルトの名無しさん2017/07/06(木) 14:10:14.25ID:flMfxcNT
うちはできてる

422デフォルトの名無しさん2017/07/12(水) 23:56:43.84ID:zDi+fEh9
外部サイトで申し訳ないのですが、GASについて下記のサイトのチュートリアルを試していたのですが
ttps://tonari-it.com/gas-web-appli-spreadsheet-append/
真似をしてみても、エラー出てしまいます。

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

自分のコードが間違えたのかと、コードをコピペしたり、スクリプト認証を再度許可を出すために
現在とは別にファイルを作り直したりしたのですが、同じエラーが出てしまいます。
このエラーを回避するにはどうすれば良いでしょうか?

423デフォルトの名無しさん2017/07/13(木) 13:23:39.30ID:G6DCMcFU
よそから持ってきたライブラリを使ってないか

4244222017/07/13(木) 13:30:04.56ID:7vUNc/rI
すみません自己解決しました。
原因はスクリプトにプロジェクトのトリガーを設定していなかったことが原因だった様です。

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

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

このトリガー自体適当に設定したので、spreadsheetに紐付いた(コンテナバウンド)webアプリがこのトリガーで本当に良いのか?
.gsがスタンドアローンだったらどうするのか?などは自分の知識ではまだ不明です。
割と有名(みんなが引っかかる)ワナらしく、「GAS 実行する権限がありません」でググると色々出てきます。

425デフォルトの名無しさん2017/07/13(木) 14:07:47.08ID:G6DCMcFU
そんなことはチュートリアルの一番最初に書いてある

426デフォルトの名無しさん2017/09/26(火) 05:38:02.61ID:uiCOOs0C
ぐぐってきたけど、ここそんなに人気ないの?

427デフォルトの名無しさん2017/09/26(火) 15:54:12.38ID:dGip1y4C

428デフォルトの名無しさん2017/09/26(火) 19:33:58.52ID:vmZLMK5C
すみませんが質問させてください。

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

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

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

なにかいい方法はありますでしょうか、、、fusiontablesなどであればできるのでしょうか?

429デフォルトの名無しさん2017/09/26(火) 19:49:32.88ID:pQJJ1OIB
ユーザーごとの情報はユーザープロパティに入れるべきでは?

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

一部のユーザー(システム管理を行う数名)に対しては、データの参照ができるようにしたいと思ったおります(申請されたデータを承認するようなワークフローアプリを検討しているため。後出して申し訳ありません)

431デフォルトの名無しさん2017/09/27(水) 14:45:10.73ID:/heCrwKp
サイズが十分小さければスクリプトプロパティかな。
たしか500KBくらいまで。

あるいは、スプレッドシートにスクリプトを付属させるんじゃなく、
独立プロジェクトにして、openByIdとかopenByUrlとかは?

432デフォルトの名無しさん2017/09/27(水) 15:36:25.01ID:Is6BRq5M
>>431
ご助言ありがとうございます。
プロパティについては、思いの外データの種類が増えそうなため難しそうです。

スクリプトをスタンドアロンにして、openbyidがいいですかね、万一idがバレてしまった時のことが不安ですが、そういったことは起こらないと思っていい感じでしょうか。

433デフォルトの名無しさん2017/09/28(木) 10:38:02.39ID:PJxaABWy
アプリを分けて階層化しろ

434デフォルトの名無しさん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つずつ足していく方法はありますでしょうか。

435デフォルトの名無しさん2017/09/29(金) 08:18:30.31ID:qX48jByc
>>433
ありがとうございます。
ライブラリ化するということでしょうか。
getEmailする部分を別アプリ(アプリにアクセスしているユーザー実行)にして、spreadsheet操作をするアプリはオーナーとして実行する感じでしょうか。
調べてみます。

436デフォルトの名無しさん2017/09/29(金) 11:06:26.65ID:/1pN5XFr
>>432
>そういったことは起こらないと思っていい感じでしょうか

マーフィーの法則というのがあってだな
そういう起こって欲しくないことは起こるんだ

4374342017/09/29(金) 11:38:46.26ID:tHWOJPZ9
自己解決しました。
ss.getRange(x,y).setFormula('=IMPORTHTML("yahoo.co.jp","table",1+'+i+')');

438デフォルトの名無しさん2017/10/27(金) 20:03:28.12ID:CxLsHkIL
googleドライブにアップしたエクセルxlsを自動でspreadsheetに変換するコードはありますか

439デフォルトの名無しさん2017/10/28(土) 10:08:42.77ID:w8au0uVc
すべてのシートで文字の一括置換をしたいのだけど、セル毎に処理するしかないのかな?

440デフォルトの名無しさん2017/10/28(土) 11:18:38.62ID:YrbVG7kU
>>438
pythonでダウソするやつはある

4414382017/10/28(土) 19:55:11.76ID:aeUdpVUN
>>440
検索してなんとなくできそうなのでやってみます
ありがとうございました

442デフォルトの名無しさん2017/11/12(日) 02:54:44.20ID:StX7DGK4
GAS単体でajaxのようなwebページをクローリングすることは可能ですか?
やっぱり外部を通さないと無理でしょうか

443デフォルトの名無しさん2017/11/12(日) 17:25:52.88ID:StX7DGK4
自己解決しました

444デフォルトの名無しさん2017/11/13(月) 13:04:40.18ID:8/cIJ70S
スプレッドシートの制御をAndroidから行う方法をご教示頂けませんでしょうか。
内容としては複数列のソートを行いたいのです。
現状は列指定でソートをかけているのですが、列数が多く余分な時間がかかります。
PCからは実行できているのですが、同様の事がAndroid上から行えたらと思います。
実行用のトリガーがAndroidで使用できずに困っております。
現状トリガーは図形に対してスクリプト実行させていますが、タップしてもAndroidでは削除しか出てきません。

445デフォルトの名無しさん2017/11/14(火) 18:34:16.47ID:IvDpdEfa
function onOpen()とmenuEntries.push使えば?

446デフォルトの名無しさん2017/12/26(火) 09:12:50.22ID:myEYxvrC
https://script.google.com/dashboard/quota
↑にあるトリガーの合計実行時間や、URLFetch の呼び出し、URLFetch のデータの受信が
現在どのくらい使用されている分かるページは無いですか?

https://console.developers.google.com
GoogleドライブAPIなら↑でわかるのにそれ以外載って無くて…

447デフォルトの名無しさん2018/01/03(水) 23:47:48.36ID:cEXvj/Pp
サーバー側でjqueryって使えますか?
WebスクレイピングのHTMLパーサとしてjqueryを使いたいのですが…

448デフォルトの名無しさん2018/01/04(木) 12:56:13.15ID:o7CttU7P
node.jsと思ったがGASか

449デフォルトの名無しさん2018/01/05(金) 01:26:13.05ID:GBYhvW0R
>>447
npmでjQueryをinstall
webpackでbundle
node-google-apps-scriptでアップロード
って感じでいけないかな?
試してないのでできるか分からないけど

450デフォルトの名無しさん2018/01/05(金) 10:44:01.68ID:Vef7Ikrv
一部の機能なら普通に使える

451デフォルトの名無しさん2018/01/06(土) 11:51:13.98ID:HbY4/bGY
どっかよそのAPI使うとか

452デフォルトの名無しさん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デカい為、変更されたときだけ読み込むようにヘッダを書き換えたい

453デフォルトの名無しさん2018/01/07(日) 12:29:16.75ID:S38kpWyE
キャッシュされたら困るからなー

454デフォルトの名無しさん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')とか普通に使えるはず
});

455デフォルトの名無しさん2018/01/27(土) 11:48:39.68ID:j3glEAxX

456デフォルトの名無しさん2018/01/28(日) 03:46:39.25ID:xa+QRUJO
GASって「const 定数名 = 1;」 みたいな記述できない?

varしか無理?

457デフォルトの名無しさん2018/01/29(月) 23:20:08.61ID:5eR4vC6L
constはランタイムエラー
letは通る
だったような記憶

458デフォルトの名無しさん2018/02/06(火) 22:16:05.06ID:/gHduiD+
addMenuでスプレッドシートに追加する独自メニューを条件によって選択不可にすることはできますか?
通常のメニューと同じようにグレーアウトして選択できないようにしたいです。

459デフォルトの名無しさん2018/02/10(土) 06:53:00.00ID:C1kfYYFU
1日1回、UrlFetchでページネイションされた数十ページを取得したいのですが
負荷軽減のため数秒は間隔を明けて取得したいです

settimeoutでエラーがでるのは、GASでは使えないということなのでしょうか?
出来ないとしたら代替方法の検索のヒントなどを教えていただきたいです

460デフォルトの名無しさん2018/02/11(日) 06:27:45.78ID:E5AjV+At
GASってひょっとしてfor(let data of datas)みたいな構文は通らないのか?

461デフォルトの名無しさん2018/02/11(日) 06:46:30.86ID:E5AjV+At
for each(let data in datas)は通った
GASまじか・・・

462デフォルトの名無しさん2018/02/13(火) 22:38:42.10ID:wCW429If
>>459
setTimeoutはブラウザでしか効かないんじゃ
Utilities.sleep(ミリ秒)使おう

463デフォルトの名無しさん2018/02/13(火) 22:39:52.24ID:wCW429If
>>458
非表示じゃダメなの?

464デフォルトの名無しさん2018/02/14(水) 06:29:23.38ID:hdXXEhGY
>>462
ありがとうございます

465デフォルトの名無しさん2018/02/14(水) 12:43:37.10ID:qm6gWFGH
>>460
>>461
良し悪しはわからないけど

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

とかしてた

466デフォルトの名無しさん2018/02/14(水) 16:40:58.15ID:rMSOrK/H
datum

467デフォルトの名無しさん2018/02/16(金) 06:23:37.77ID:W1XJdyx1
☆ 日本の、改憲を行いましょう。現在、衆議員と参議院の
両院で、改憲議員が3分の2を超えております。
『憲法改正国民投票法』、でググってみてください。国会の発議は
すでに可能です。平和は勝ち取るものです。お願い致します。☆☆

新着レスの表示
レスを投稿する