X



【MACRO】Google Apps Script 質問スレ【DRIVE】
レス数が900を超えています。1000を超えると表示できなくなるよ。
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/
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を超えると表示できなくなるよ。

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