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/
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の略」って付け加える
0484デフォルトの名無しさん
垢版 |
2018/05/14(月) 13:31:22.77ID:dnGRWxRE
>>481
ぎゃす
0485デフォルトの名無しさん
垢版 |
2018/05/23(水) 19:22:31.65ID:Au5e7VGg
僕の知り合いの知り合いができたパソコン一台でお金持ちになれるやり方
役に立つかもしれません
グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』

WX5I9
0487デフォルトの名無しさん
垢版 |
2018/05/25(金) 01:08:25.88ID:9upiSQGW
<HEAD>タグの中に文字コードの設定<meta charset= がある場合は、文字コードを抜き出すプログラムを組んでいます。(下記の関数)


function getEntag(response){
var myRegexp = /<HEAD>([\s\S]*)<\/HEAD>/gi;
var elems = response.getContentText().match(myRegexp);
var myEncode = /<meta charset="(.+?)">/gi;
var myEncodeR = elems.getContentText().match(myEncode); // ←この行でエラーが出る
return myEncodeR;
}


エラーの内容
TypeError: オブジェクト「文字列文字列文字列文字列文字列」で関数 getContentText が見つかりません。


なぜ
response.getContentText().match(myRegexp);
はうまくいくのに
var myEncodeR = elems.getContentText().match(myEncode);
はうまくいかないのでしょうか?
0488デフォルトの名無しさん
垢版 |
2018/05/25(金) 03:33:33.31ID:JRXZZDGl
elems[0]
0489デフォルトの名無しさん
垢版 |
2018/05/25(金) 08:23:06.06ID:GbGPTGD4
GASでpdfを作成したいと思い
サイトを参考に出せるようになったのですが
余白の設定オプションを教えていただけないでしょうか?

exportFormat: "pdf", // ファイル形式の指定 pdf / csv / xls / xlsx
format: "pdf", // ファイル形式の指定 pdf / csv / xls / xlsx
size: "A4", // 用紙サイズの指定 legal / letter / A4
portrait: "true", // true → 縦向き、false → 横向き
fitw: "true", // 幅を用紙に合わせるか
sheetnames: "false", // シート名をPDF上部に表示するか
printtitle: "false", // スプレッドシート名をPDF上部に表示するか
pagenumbers: "false", // ページ番号の有無
gridlines: "false", // グリッドラインの表示有無
fzr: "false", // 固定行の表示有無
ここら辺のオプションワードをつけてGoogle検索して見たのですが見つからないでいます
よろしくおねがいいたします
0490デフォルトの名無しさん
垢版 |
2018/05/25(金) 09:48:46.51ID:JEsKWWiQ
google apps script pdf margin
でググったらstackoverflowとかヒットするけど見てみた?
俺は見てないけど。
0491デフォルトの名無しさん
垢版 |
2018/05/25(金) 13:10:56.83ID:zfLEVsZm
日々の記録をgoogle apps script で記録してたんだが1ヶ月忙しくて
記録の確認してなかったら先月4月26日以降の記録が取れてなかった
プロジェクトを動かすと「承認が必要です」で前もやったことがあるような
画面がでて一つ一つのプロジェクトを自動実行させるために承認設定をした
100ぐらいプロジェクトがあるんだが一つ一つを手作業で承認させるのが
大変だし前もこんなことをさせられた記憶があるんだが
承認を一回で全てのプロジェクトを設定する方法とかないですかね?
0492デフォルトの名無しさん
垢版 |
2018/05/25(金) 16:14:05.22ID:XO9fqtgP
っていうかしばらくしたらまた承認求められそうでこわいな
0493デフォルトの名無しさん
垢版 |
2018/05/26(土) 08:10:21.44ID:hhovu7qg
>>490
ありがとうございます
設定することができました!
0494デフォルトの名無しさん
垢版 |
2018/05/27(日) 18:16:43.31ID:AVKJ/EkR
google apps scriptでLZHを解凍したいと思っています。
以下のどちらかのコードはGASでも使用可能でしょうか?
又は、ほかに何か良い方法があるでしょうか?

ttps://github.com/erlandranvinge/lh4.js/tree/master
ttp://formats.kaitai.io/lzh/javascript.html

現在1つのテキストファイルが圧縮されたzipのblobを、
Utilities.unzip
で解凍し、中のテキストファイルを利用しているのですが、
LZHでも同じ事ができるようにしたいと考えています。

上記ページのサンプルは見たのですが、
DOMが全く分からず、javascriptの理解も浅いため、
どう書けばよいのかわかりませんでした。
LZHのblobから解凍されたファイルのblobが得られれば理想的です。
アドバイスお願いしますm(_ _)m
0495デフォルトの名無しさん
垢版 |
2018/06/01(金) 18:16:54.34ID:zHSboa0n
質問です
色んなサイトを見ながら、Google spread sheetにスクリプトを作成しました
このスクリプトを外部アプリから実行するにはどうすれば良いのでしょうか。

ちなみに外部アプリとはDiscordの事です。
0496デフォルトの名無しさん
垢版 |
2018/06/01(金) 18:21:14.88ID:Wbxpqrec
オレオレAPIをくっ付ける
0498デフォルトの名無しさん
垢版 |
2018/06/01(金) 21:11:40.39ID:xvkHhoxN
doGetかdoPost作ってHTTPで呼べばいいじゃない
0499デフォルトの名無しさん
垢版 |
2018/06/02(土) 12:34:27.24ID:yUEJ+BJS
djangoみたいなdispatcherとかroutingの仕組みないかな
レスを投稿する


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