X



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

レス数が900を超えています。1000を超えると表示できなくなるよ。
0879デフォルトの名無しさん
垢版 |
2023/01/21(土) 20:12:40.75ID:tr5Udobt
>>878
パッと見だけど

displayTableはフロント側の関数だよね
getTable_Areaはgoogle.script.run経由で呼び出してるからgs(バックエンド側)の関数だよね

google.script.runはwithSuccessHandlerのコールバックでレスポンス受け取るから、変数htmlTableはundefinedになるんじゃね?
0880デフォルトの名無しさん
垢版 |
2023/01/21(土) 21:05:36.17ID:EDO4fSiJ
>>879
>displayTableはフロント側の関数だよね
>getTable_Areaはgoogle.script.run経由で呼び出してるからgs(バックエンド側)の関数だよね
はい。それぞれフロントとバックエンド側になります。
withSuccessHandlerを以下の通りに使用し、実行したところundefinedは表示されなくなったのですが、表が表示されないということはcalculateArea()の書き方がいけないのでしょうか?
<script>
function calculateArea() {
var htmlTable = "";
google.script.run.withSuccessHandler(function(data) {
htmlTable = data;
}).getTable_Area();
document.getElementById("createdTable").innerHTML = htmlTable;
}
</script>
0881デフォルトの名無しさん
垢版 |
2023/01/21(土) 21:11:08.81ID:tr5Udobt
>>880
こうしてみて

function calculateArea() {
google.script.run.withSuccessHandler(function(data) {
document.getElementById("createdTable").innerHTML = data;
}).getTable_Area();
}
0882デフォルトの名無しさん
垢版 |
2023/01/21(土) 22:20:43.38ID:EDO4fSiJ
>>881
ありがとうございます!表が表示されるようになりました!

もし可能であれば、もう1点教えていただきたいのですが、
上記 function getTable_Area()には
'<td><input value=<?= getArea();?>></input></td>'
のようにgetArea()などの関数を表が作成される際に呼ばれるよにしています。
しかし、表示されたタブをみてみると
<input value="<?=" getarea();?="">
になっており、エスケープ処理?がされているみたいです。
実際にアプリを開発する際は、何か別の方法でinputの値に関数の戻り値を代入しているのでしょうか?
0883デフォルトの名無しさん
垢版 |
2023/01/21(土) 22:36:15.48ID:tr5Udobt
>>882
そのgetAreaはどっちの関数?
フロント?バック?
0884デフォルトの名無しさん
垢版 |
2023/01/21(土) 22:50:23.61ID:EDO4fSiJ
>>883
バック(gs)になります。
0885デフォルトの名無しさん
垢版 |
2023/01/21(土) 22:59:56.13ID:tr5Udobt
>>884
これで良くない?

function getTable_Area() {

const a = new Date();
const b = getArea();

return '<table>' +
'<thead>' +
'<tr>' +
'<th>Result</th>' +
'</tr>' +
'</thead>' +
'<tbody>' +
'<tr>' +
'<td>Date</td>' +
'<td><input value="' + a + '"></input></td>' +
'</tr>' +
'<tr>' +
'<td>Area</td>' +
'<td><input value="' + b + '"></input></td>' +
'</tr>' +
'</tbody>' +
'</table>';
}
0886デフォルトの名無しさん
垢版 |
2023/01/21(土) 23:07:30.06ID:EDO4fSiJ
>>885
なるほど。そのようにすればよかったのですか。
ありがとうございます!大変勉強になりました!
0888デフォルトの名無しさん
垢版 |
2023/01/21(土) 23:41:09.53ID:EDO4fSiJ
>>887
いえいえ。重ね重ね、ありがとうございます!
テンプレートリテラルを勉強して使ってみようと思います。

またご推察の通り、同期の問題も発生しておりますので、それも合わせて勉強してみます。
0889デフォルトの名無しさん
垢版 |
2023/01/22(日) 09:05:30.28ID:1NpPY/pK
ERB(埋め込み・Embedded RuBy)なら、HTML 内で、
<% 〜 %> でRubyのコード片を実行するだけ(出力はしない)。
<%= 〜 %> でRubyのコード片を実行して出力する

例えば、a.html.erb が以下なら、

<% ary = [ "<a>", "あ" ] %>

<% ary.each do |item| %>
<input type="text" value="<%= item %>">
<% end %>

a.html は、以下のように出力される

<input type="text" value="<a>">
<input type="text" value="あ">
0890デフォルトの名無しさん
垢版 |
2023/01/25(水) 19:23:10.13ID:EJwoBEnK
test
0891デフォルトの名無しさん
垢版 |
2023/01/25(水) 19:23:43.80ID:EJwoBEnK
やりたいこと:
Maps.newStaticMap()で作成した画像?をHTML上に表示させたい。

試したこと:
index.htmlから呼ばれるtest.gsの関数内で
var googleMap = Maps.newStaticMap().setCenter(centreY,centreX)
を定義して
return googleMap.getMapUrl();
でそのURLを取得しました。
そのURLをHTMLのIMGタグに
<img src="〇〇〇" width="100px" height="100px">
と入れても画像が表示されませんでした。


HTML上でbodタグの中に画像を表示させようとしているのですが、ファイルアイコンが半分に敗れたものが表示されています。
0892デフォルトの名無しさん
垢版 |
2023/01/26(木) 03:32:17.94ID:n/mKepPR
>>891
getUrlで取得されたURLにあるものって画像じゃないよね
画像じゃないものをimgタグにセットしても表示されないよ

URLにあるものを画像化するか
iframe使って表示させるか(未検証)
どっちかのアプローチじゃないかな
0893デフォルトの名無しさん
垢版 |
2023/01/26(木) 04:58:55.72ID:p3aeborJ
>>892
わかりました。
ありがとうございます。
0894デフォルトの名無しさん
垢版 |
2023/02/02(木) 21:14:34.93ID:d3AVgBUi
GAS愛好家のみなさん
ContactsAppからPeopleAPIへの移行状況はいかがですか?

勝手が違いすぎてよーわからん
公式すらあんまり情報ないしマトモな記事載せてるサイトもないですよね
0895デフォルトの名無しさん
垢版 |
2023/02/03(金) 12:45:44.80ID:0b57qUmd
スプレッドシートについての質問をさせてください
条件付き書式で、フォントサイズを変更するにはどうしたらいいでしょうか
表で一定の値の数字以上はフォントサイズが大きくなる、という仕様にしたいです
0897デフォルトの名無しさん
垢版 |
2023/02/15(水) 16:03:34.65ID:b8FtSvc2
GASじゃなくてスプレッドシートなのだけど、
検索窓閉じた時検索結果に跳ぶの避けられませんかね。
0898デフォルトの名無しさん
垢版 |
2023/02/18(土) 13:58:20.49ID:W3nKwjDO
やりたいこと
スプレッドシートに沢山ある あ い う とかいう文字列を
i[あ.い.う...]
t[a.b.c...]
という配列使って一度に置換作業がしたい。
i[1]→t[1]みたいな感じで。

replafeとforの組み合わせでなんとかなるかな?と思ったのですが、リファレンス読む限りreplace(a,b)の置換のa部分に変数を用いることは出来ないようなので他の方法を探しています。
ご教授頂きたく。
0899デフォルトの名無しさん
垢版 |
2023/02/18(土) 18:58:41.14ID:W3nKwjDO
>>898
自己解決。
というか諦めて別シートに呼び出した後substituteとxlookupの組み合わせで無理やり置換したのを表示させました。
0902デフォルトの名無しさん
垢版 |
2023/02/20(月) 02:05:22.77ID:6OqVkYRD
>>901
ありがとうございます!spliceメソッド使ってみます。
その前に1つずつ検索かけるのに手古摺ってますが、なんとかやってみたいと思います。
0903898
垢版 |
2023/02/20(月) 16:04:41.81ID:4jGYSd8p
駄目でした…
includesにしてもmatchにしても配列[ ]で指定するとうまく動いてくれません。
配列を作らずfor文で無理やりセルを置換させるという荒業で解決しましたが時間がかかり過ぎて実用的でなく。

やりたいこと
table[[あ],[か],[さ],[た]...]
before[あ][い]...
after[ア][イ]...
以上の配列があり、
tableに対しbefore[i]を総当りで検索し一致したらafter[i]に置き換える。
0904デフォルトの名無しさん
垢版 |
2023/02/20(月) 18:43:52.85ID:czK6pNoa
>>903
やりたいことがいまいちわからん
こういうこと?

# ひらがなをカタカナに変換
table = [['あ','ア'], ['い','イ'], ['う','ウ'], ['え','エ'], ['お','オ'] ];
before = ['あ','い','う','え','お'];
after = before.map(b => table.find(a => b === a[0])[1]);
0905898
垢版 |
2023/02/20(月) 18:49:29.88ID:83YdaF3i
ありがとうございます。配列の中身は適当です…。
表と配列2種類の3つの要素があって、表にある配列1の要素を見つけたら配列2に置き換えるということをしたかったのです。

ですがお陰様でなんとかなりました!
二次元配列をflat()で一次元にして、splice使いました。
その後再度2次元配列に戻して元の形に直しました。
0906898
垢版 |
2023/02/21(火) 00:26:18.85ID:B3qxCQs3
>>904
mapメソッドはまだ理解できておらず…。
その一行で終わらせられるように勉強していきたいと思います。
結局以下のようになりました。ご教授ありがとうございました。

//1次元配列への変換。
let array = array.flat();
//array[x]とbefore[i]が一致したら置換(before→after)
for(let x = 0 ; x < array.length ; i++ ){
for(let i = 0 ; i < before.length ; i++ ){
if(array[x] == be[i]){
array.splice(x,1,after[i]);
}
}
//2次元配列に再変換、あとで貼付する。
let array2 = [];
let numOfElements = 6;//表の元のTableが6列あったので。
for(let t = 0; 0 < array.length ; t){
array2.push(array.splice( t, numOfElements ));
}
0907デフォルトの名無しさん
垢版 |
2023/02/21(火) 02:43:28.40ID:6tAoYaOK
>>906
flat使わなくてもいい

for(let i = 0; i< array.length; i++) {
for(let j = 0; j< array[i].length; j++) {
if(before.includes(array[i][j])) {
array[i][j] = after[before.indexOf(array[i][j])];
}
}
}

map使うなら
array2 = array.map(r => r.map(c => before.includes(c) ? after[before.indexOf(c)] : c));
0908898
垢版 |
2023/02/21(火) 08:58:31.52ID:B3qxCQs3
>>907
そのarray[i][j]の[j]を入れるとindexOfにしてもincludesにしてもうちの環境?では何故かエラー出て読み込めなかったんですよ。(
確かcannot read properties of undefinedだった筈)
それ外すとエラーなく読んだので仕方なくflat入れた次第です。
因みに
arrayX=array[x]
arrayY=array[y]
みたいに入れ子しても駄目でした。
0909898
垢版 |
2023/02/21(火) 09:10:16.56ID:B3qxCQs3
確認したらエラー全然違うし書いてること散々でした
訂正
出てたエラーは多分is not defined
下の入れ子は
arrayX=array[x]
arrayY=arrayX[y]
みたいにしても同じエラーだったかと。
0910デフォルトの名無しさん
垢版 |
2023/02/21(火) 23:07:45.74ID:6tAoYaOK
>>908
>そのarray[i][j]の[j]を入れるとindexOfにしてもincludesにしてもうちの環境?では何故かエラー出て
たぶん配列の添字が範囲外になってるんだろうけど
for文よりfor ofとかforEachのほうがシンプルにかける
const array2 = [];
for(let row of array) {
let cols = [];
for(let col of row) {
if(before.includes(col)) {
cols.push(after[before.indexOf(col)]);
}
else {
cols.push(col);
}
}
array2.push(cols);
}

const array2 = [];
array.forEach(function(row, i) {
row.forEach(function(col, j) {
if(before.includes(col)) {
array[i][j] = after[before.indexOf(col)];
}
});
});
0911デフォルトの名無しさん
垢版 |
2023/02/21(火) 23:08:33.93ID:6tAoYaOK
あと上のmapは省略しすぎてわかりにくかったのでアロー関数と三項演算子をやめたらこうなる
const array2 = array.map(function(row) {
return row.map(function(col) {
if(before.includes(col)) {
return after[before.indexOf(col)];
}
else {
return col;
}
});
});
0912898
垢版 |
2023/02/22(水) 11:50:37.27ID:7vReBJfV
>>910-911
何度もありがとうございます。
仰るとおり2度目の添字は一切読み込んでくれないので…
>>911のmap参考にしながら勉強させていただきます。
とりあえず長くなってしまったのでこの辺りで。また不具合出てきたら改めて質問したいと思います。
ありがとうございました!
0913デフォルトの名無しさん
垢版 |
2023/02/28(火) 21:38:42.26ID:8PRLUyLU
スプレッドシートの共有で閲覧権限を持っている人の
印刷は可能でファイルのダウンロードだけ禁止することは可能でしょうか?
0914デフォルトの名無しさん
垢版 |
2023/03/01(水) 10:13:26.28ID:NPxLOyBL
共有アイテムのファイルにスターをつける方法を教えてください
宜しくお願いしますm(_ _)m
0915デフォルトの名無しさん
垢版 |
2023/03/01(水) 14:17:21.21ID:csCK6+UB
sheetクラスを取得する方法ってgetSheetByNameとgetActiveSheetしかないよね?
getSheetBySheetIdがないのが謎なんだけどシートはシート名で管理するしかない?
0916914
垢版 |
2023/03/12(日) 00:26:03.80ID:ZZBXPzbK
>>914
自己解決しました
0917デフォルトの名無しさん
垢版 |
2023/03/24(金) 19:19:34.21ID:GCLzu5nr
Rangeオブジェクトから、セルアドレスの文字列を取得したい場合
Excelならr.Address()で相対参照や絶対参照を取得できますが
GASで同じようなことできるメソッドあります?
getA1Notation()だと相対アドレスでしか取得できないようで…
0919デフォルトの名無しさん
垢版 |
2023/03/25(土) 11:52:56.28ID:TC3JXJ5y
>>918
例えば
A1のRangeオブジェクトから
$A$1という文字列を取得できないかなと

GASから条件付き書式を設定するのに使いたいです

なぜ使いたいかというと
複数人で編集してコピペを繰り返すと条件付き書式が破壊されてしまうので
それを上書きリセットするためです

逆に、条件付書式だけロックかけて切り取ったり貼り付けたり出来ない設定ができるならそれで十分なのですが…
0920デフォルトの名無しさん
垢版 |
2023/03/25(土) 17:53:03.57ID:nYxwu6kr
>>919
>複数人で編集してコピペを繰り返すと条件付き書式が破壊されてしまうのでそれを上書きリセットするためです
通常の書式ならonEditで変更されたセルの書式を変更するだけでいいけど
条件付き書式をGAS上で扱ったことなかったから調べたけどちょっと面倒だね
そんでよくよく考えてみたらそもそもGAS使うならonEditで書式変更すればいいだけだから条件付き書式を使う必要がないと思った
0921デフォルトの名無しさん
垢版 |
2023/04/04(火) 12:37:38.49ID:dAPefWGR
スプレッドシートにスクリプト作成して権限付与して動作するように設定したあと
そのスプレッドシートをコピーするとスクリプトもコピーされるようですが
スクリプトの権限やトリガーは設定しなおしが必要のようです。
イメージ的には、vba付のExcelをコピーして別ファイルとして保存して
毎月のデータを作成していく、みたいなことがしたいんですが
その辺コピーするだけで全部引き継がれるみたいな設定ないのでしょうか?
0922デフォルトの名無しさん
垢版 |
2023/04/11(火) 18:45:08.89ID:u8YBlLPL
類似画像を判別できるようなライブラリとか公開されてるコードありますか?
検索するとpythonだとImageHashってライブラリがあるんだけどGASで同じようなことしたい
0923デフォルトの名無しさん
垢版 |
2023/04/21(金) 16:25:28.26ID:vnxhj4My
ごめんgoogleスプレッドシートの質問スレがみつからずこちらで質問させてください。

シートのある列をユーザーごとの閲覧を制限かけたい
有効な方法ありますか?
0924デフォルトの名無しさん
垢版 |
2023/04/21(金) 16:53:56.40ID:8VcMj5ya
閲覧の制限はファイル単位でしか出来ないでしょ
シート、セル(列/行)単位は編集の制限しか出来ない
0925デフォルトの名無しさん
垢版 |
2023/04/21(金) 17:40:05.18ID:vnxhj4My
ありがとうございます。
確かに「表示」→「保護されている範囲」でできそうだったけど。やっぱりだめでした。
諦めて、もう一つリンクしたファイルのシート作ってそちらに閲覧されたくない列を追加します。
0926デフォルトの名無しさん
垢版 |
2023/05/02(火) 21:52:22.95ID:39G20EoK
Googleカレンダーに予定を追加するプログラムを使ってるんだけど、「場所を追加」ちゃんと場所を追加したいです

以下詳細

普通に手作業でGoogleカレンダーに予定を追加するときは、「場所を追加」に場所の名前を入力すると候補が出てきて、そこから選ぶと、そこに間に合うためには何時に家を出ればいいかの通知が来たり、Android版のGoogleカレンダーだと予定の背景がその場所の写真になったりします。

で、GASで予定を追加するとき、場所を指定するためにGoogleマップのURLを使ってるんだけど、それだとURLが表示されるのみで、上記の通知とか背景写真とかが実行されません。
公式ドキュメントでも {location: 'Conference Room'}とされており、Googleマップ上の場所を使う気がなさそうです。

ちゃんとした「場所の追加」は、ウェブ上でマウスで操作しないとできないのでしょうか?
0930デフォルトの名無しさん
垢版 |
2023/07/08(土) 12:42:20.50ID:CwJ0Byq0
質問させてください

Googleフォームの送信時イベントで入力された値を取るために
イベントを作成しましたが、どうしてもイベントパラメータがnullになってしまいます
Webページにあるサンプルではeからいろいろな情報が取れるように書かれているのですが、nullとなってしまう理由がわからずに困っています

function myFunction(e) {
Logger.log("myFunction start")
Logger.log(e)
}

— ログ
12:27:10 お知らせ 実行開始
12:27:10 情報 myFunction start
12:27:10 情報 null
12:27:10 お知らせ 実行完了
0932デフォルトの名無しさん
垢版 |
2023/08/22(火) 23:04:26.43ID:+ZplHR9+
GASではなく、スプレッドシートの質問なのですが、もし適切なスレッドがあったら誘導お願いします

セルに例えば「130409.67」と入力し、
表示形式>数字>通貨(端数切り捨て)
に設定すると、小数点以下が切り捨てではなく四捨五入されてしまいます。
これはなにか私の使い方がおかしいのでしょうか?
また、他の方法でも良いので、内部的には小数点を保持しつつ、表示上だけ小数点以下を切り捨てる(非表示)する方法があれば教えてください。宜しくお願いします。
0933デフォルトの名無しさん
垢版 |
2023/09/10(日) 09:27:06.36ID:yM7j2B0I
オhル
0934デフォルトの名無しさん
垢版 |
2023/09/22(金) 13:52:01.19ID:dkRHHNCe
GTKは糞
0935デフォルトの名無しさん
垢版 |
2023/09/24(日) 09:36:46.05ID:2YTVyUlC
君は失格
やり治せ
0936デフォルトの名無しさん
垢版 |
2023/10/20(金) 12:46:49.67ID:/M3RKJCH
GAS抜きで
0938デフォルトの名無しさん
垢版 |
2023/10/31(火) 16:30:00.40ID:qmiHWWBC
>>937
ありがとうございます
それを入力したセル(A1)の隣に、
=A1×8
とすると、24と出るので、内部で小数点以下を保持してないようです
0939898
垢版 |
2023/10/31(火) 17:43:19.30ID:F7pL/7Za
>>938
truncは切り捨てかな。
というかカスタム表示形式の # じゃ駄目なん?
0940デフォルトの名無しさん
垢版 |
2024/03/10(日) 15:35:26.40ID:H28l+VF2
スプレッドシートについての質問です。

SBI証券のマイページからポートフォリオのcsvファイルをダウンロードすることができます。
GASにより、自動で、ポートフォリオの円グラフを作りたいのですが、スクリプトはコンテナバインドではなくスタンドアローンでないと駄目でしょうか?
毎日、csvファイルをダウンロードして、円グラフを描く予定なので、コンテナバインドだと駄目ですよね?
0941デフォルトの名無しさん
垢版 |
2024/03/10(日) 15:38:07.27ID:H28l+VF2
でもスタンドアロンにすると、スプレッドシートを開くときに、ファイルのIDを指定しないと駄目ですよね。
このIDが毎日変わることになると思いますが、この部分をどうすれば楽ができるでしょうか?
0942デフォルトの名無しさん
垢版 |
2024/03/10(日) 15:55:50.28ID:vw/rAwFk
なんでコンテナバインドじゃだめなの?
トリガーで1日1回実行すればいいんじゃないの
0943デフォルトの名無しさん
垢版 |
2024/03/10(日) 16:29:51.77ID:H28l+VF2
>>942

自動でダウンロードして来るとかそういうことを想定していますか?
そういう技術はありませんので、手動でダウンロードしてきて、Google Driveにアップロードする。
これを毎日やろうと考えています。
そうするとファイル自体が毎日変わりますし、IDも変わってしまうのではないかと思います。
バインドを新しい他のファイルに引き継ぐことはできませんよね?
0944デフォルトの名無しさん
垢版 |
2024/03/10(日) 16:50:03.03ID:vw/rAwFk
>>943
ファイルIDが変わってもファイルを保存するフォルダが固定なら
そのフォルダのファイル一覧を取得すればいいんでは?
0945デフォルトの名無しさん
垢版 |
2024/03/10(日) 17:01:06.12ID:H28l+VF2
>>944

なるほど、ありがとうございました。
そういうことができるんですね。
ということは、スタンドアロンである固定したフォルダからファイルの一覧を取得する。
SBI証券からダウンロードしてきたcsvファイルは、その日の日付をファイル名とする。
ファイルの一覧からその日の日付のファイルをオープンして、円グラフを作成する。

ありがとうございました。
0946デフォルトの名無しさん
垢版 |
2024/03/11(月) 11:33:26.37ID:Voh59fAx
csvファイルに、

'+7441000

というデータがあります。

これをSpreadsheetとしてインポートすると、セル上で

+7441000

と表示されます。

先頭に「+」がついていますが、扱いは文字列ではなく、数字です。
この「+」をGASを使って削除したいのですが、どうすればいいでしょうか?
このセルを選択した状態で「fx」の右隣をみると「'+7441000」となっています。
0947デフォルトの名無しさん
垢版 |
2024/03/11(月) 21:30:14.93ID:Voh59fAx
>>946

なんとか解決しました。
0948デフォルトの名無しさん
垢版 |
2024/04/04(木) 12:51:32.09ID:q67OTvc3
getUi().showModelessDialog()の挙動おかしくなった?
他をクリックしたら閉じるようになったし移動も出来なくなった
バグですか?
レスを投稿する

レス数が900を超えています。1000を超えると表示できなくなるよ。

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