2ちゃんねる スマホ用 ■掲示板に戻る■ 全部 1- 最新50    

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

1 :デフォルトの名無しさん:2014/06/29(日) 11:07:03.38 ID:5HmND7Qc.net
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/

906 :デフォルトの名無しさん:2023/02/18(土) 18:58:41.14 ID:W3nKwjDO.net
>>905
自己解決。
というか諦めて別シートに呼び出した後substituteとxlookupの組み合わせで無理やり置換したのを表示させました。

907 :デフォルトの名無しさん:2023/02/19(日) 14:19:59.95 ID:bukleA+Y.net
>>905
日立?

908 :デフォルトの名無しさん:2023/02/19(日) 22:06:54.53 ID:sztA44Ir.net
>>905
spliceで置き換える
https://gray-code.com/javascript/replace-item-for-array/

909 :デフォルトの名無しさん:2023/02/20(月) 02:05:22.77 ID:6OqVkYRD.net
>>908
ありがとうございます!spliceメソッド使ってみます。
その前に1つずつ検索かけるのに手古摺ってますが、なんとかやってみたいと思います。

910 :898:2023/02/20(月) 16:04:41.81 ID:4jGYSd8p.net
駄目でした…
includesにしてもmatchにしても配列[ ]で指定するとうまく動いてくれません。
配列を作らずfor文で無理やりセルを置換させるという荒業で解決しましたが時間がかかり過ぎて実用的でなく。

やりたいこと
table[[あ],[か],[さ],[た]...]
before[あ][い]...
after[ア][イ]...
以上の配列があり、
tableに対しbefore[i]を総当りで検索し一致したらafter[i]に置き換える。

911 :デフォルトの名無しさん:2023/02/20(月) 18:43:52.85 ID:czK6pNoa.net
>>910
やりたいことがいまいちわからん
こういうこと?

# ひらがなをカタカナに変換
table = [['あ','ア'], ['い','イ'], ['う','ウ'], ['え','エ'], ['お','オ'] ];
before = ['あ','い','う','え','お'];
after = before.map(b => table.find(a => b === a[0])[1]);

912 :898:2023/02/20(月) 18:49:29.88 ID:83YdaF3i.net
ありがとうございます。配列の中身は適当です…。
表と配列2種類の3つの要素があって、表にある配列1の要素を見つけたら配列2に置き換えるということをしたかったのです。

ですがお陰様でなんとかなりました!
二次元配列をflat()で一次元にして、splice使いました。
その後再度2次元配列に戻して元の形に直しました。

913 :898:2023/02/21(火) 00:26:18.85 ID:B3qxCQs3.net
>>911
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 ));
}

914 :デフォルトの名無しさん:2023/02/21(火) 02:43:28.40 ID:6tAoYaOK.net
>>913
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));

915 :898:2023/02/21(火) 08:58:31.52 ID:B3qxCQs3.net
>>914
そのarray[i][j]の[j]を入れるとindexOfにしてもincludesにしてもうちの環境?では何故かエラー出て読み込めなかったんですよ。(
確かcannot read properties of undefinedだった筈)
それ外すとエラーなく読んだので仕方なくflat入れた次第です。
因みに
arrayX=array[x]
arrayY=array[y]
みたいに入れ子しても駄目でした。

916 :898:2023/02/21(火) 09:10:16.56 ID:B3qxCQs3.net
確認したらエラー全然違うし書いてること散々でした
訂正
出てたエラーは多分is not defined
下の入れ子は
arrayX=array[x]
arrayY=arrayX[y]
みたいにしても同じエラーだったかと。

917 :デフォルトの名無しさん:2023/02/21(火) 23:07:45.74 ID:6tAoYaOK.net
>>915
>その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)];
}
});
});

918 :デフォルトの名無しさん:2023/02/21(火) 23:08:33.93 ID:6tAoYaOK.net
あと上のmapは省略しすぎてわかりにくかったのでアロー関数と三項演算子をやめたらこうなる
const array2 = array.map(function(row) {
return row.map(function(col) {
if(before.includes(col)) {
return after[before.indexOf(col)];
}
else {
return col;
}
});
});

919 :898:2023/02/22(水) 11:50:37.27 ID:7vReBJfV.net
>>917-918
何度もありがとうございます。
仰るとおり2度目の添字は一切読み込んでくれないので…
>>918のmap参考にしながら勉強させていただきます。
とりあえず長くなってしまったのでこの辺りで。また不具合出てきたら改めて質問したいと思います。
ありがとうございました!

920 :デフォルトの名無しさん:2023/02/28(火) 21:38:42.26 ID:8PRLUyLU.net
スプレッドシートの共有で閲覧権限を持っている人の
印刷は可能でファイルのダウンロードだけ禁止することは可能でしょうか?

921 :デフォルトの名無しさん:2023/03/01(水) 10:13:26.28 ID:NPxLOyBL.net
共有アイテムのファイルにスターをつける方法を教えてください
宜しくお願いしますm(_ _)m

922 :デフォルトの名無しさん:2023/03/01(水) 14:17:21.21 ID:csCK6+UB.net
sheetクラスを取得する方法ってgetSheetByNameとgetActiveSheetしかないよね?
getSheetBySheetIdがないのが謎なんだけどシートはシート名で管理するしかない?

923 :914:2023/03/12(日) 00:26:03.80 ID:ZZBXPzbK.net
>>921
自己解決しました

924 :デフォルトの名無しさん:2023/03/24(金) 19:19:34.21 ID:GCLzu5nr.net
Rangeオブジェクトから、セルアドレスの文字列を取得したい場合
Excelならr.Address()で相対参照や絶対参照を取得できますが
GASで同じようなことできるメソッドあります?
getA1Notation()だと相対アドレスでしか取得できないようで…

925 :デフォルトの名無しさん:2023/03/24(金) 20:40:28.68 ID:h6PMjTMa.net
>>924
よく分かってないけどそれ意味あるの?
ただの文字列なんだから相対も絶対もないような

926 :デフォルトの名無しさん:2023/03/25(土) 11:52:56.28 ID:TC3JXJ5y.net
>>925
例えば
A1のRangeオブジェクトから
$A$1という文字列を取得できないかなと

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

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

逆に、条件付書式だけロックかけて切り取ったり貼り付けたり出来ない設定ができるならそれで十分なのですが…

927 :デフォルトの名無しさん:2023/03/25(土) 17:53:03.57 ID:nYxwu6kr.net
>>926
>複数人で編集してコピペを繰り返すと条件付き書式が破壊されてしまうのでそれを上書きリセットするためです
通常の書式ならonEditで変更されたセルの書式を変更するだけでいいけど
条件付き書式をGAS上で扱ったことなかったから調べたけどちょっと面倒だね
そんでよくよく考えてみたらそもそもGAS使うならonEditで書式変更すればいいだけだから条件付き書式を使う必要がないと思った

928 :デフォルトの名無しさん:2023/04/04(火) 12:37:38.49 ID:dAPefWGR.net
スプレッドシートにスクリプト作成して権限付与して動作するように設定したあと
そのスプレッドシートをコピーするとスクリプトもコピーされるようですが
スクリプトの権限やトリガーは設定しなおしが必要のようです。
イメージ的には、vba付のExcelをコピーして別ファイルとして保存して
毎月のデータを作成していく、みたいなことがしたいんですが
その辺コピーするだけで全部引き継がれるみたいな設定ないのでしょうか?

929 :デフォルトの名無しさん:2023/04/11(火) 18:45:08.89 ID:u8YBlLPL.net
類似画像を判別できるようなライブラリとか公開されてるコードありますか?
検索するとpythonだとImageHashってライブラリがあるんだけどGASで同じようなことしたい

930 :デフォルトの名無しさん:2023/04/21(金) 16:25:28.26 ID:vnxhj4My.net
ごめんgoogleスプレッドシートの質問スレがみつからずこちらで質問させてください。

シートのある列をユーザーごとの閲覧を制限かけたい
有効な方法ありますか?

931 :デフォルトの名無しさん:2023/04/21(金) 16:53:56.40 ID:8VcMj5ya.net
閲覧の制限はファイル単位でしか出来ないでしょ
シート、セル(列/行)単位は編集の制限しか出来ない

932 :デフォルトの名無しさん:2023/04/21(金) 17:40:05.18 ID:vnxhj4My.net
ありがとうございます。
確かに「表示」→「保護されている範囲」でできそうだったけど。やっぱりだめでした。
諦めて、もう一つリンクしたファイルのシート作ってそちらに閲覧されたくない列を追加します。

933 :デフォルトの名無しさん:2023/05/02(火) 21:52:22.95 ID:39G20EoK.net
Googleカレンダーに予定を追加するプログラムを使ってるんだけど、「場所を追加」ちゃんと場所を追加したいです

以下詳細

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

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

ちゃんとした「場所の追加」は、ウェブ上でマウスで操作しないとできないのでしょうか?

934 :デフォルトの名無しさん:2023/05/03(水) 00:25:10.26 ID:2fvruydV.net
>>933
URLじゃなくてその場所の名前か住所、もしくは緯度経度を入れればいいんじゃないの?

935 :デフォルトの名無しさん:2023/05/03(水) 03:09:39.55 ID:CT7gAj9T.net
>>934
それが名前や住所を入れても、その文字列が表示されるだけのようです
こんな感じ
https://i.imgur.com/pn88z8w.jpg
ブラウザかアプリで場所を選択した時には場所と認識されるのか、こう表示されます
https://i.imgur.com/k3K5mhe.jpg

936 :デフォルトの名無しさん:2023/05/16(火) 22:03:10.90 ID:9Kd/3stA.net
ゲッ!!(/||| ̄▽)y-ξ⌒◇ヾ( ̄  ̄;)ジュッ

937 :デフォルトの名無しさん:2023/07/08(土) 12:42:20.50 ID:CwJ0Byq0.net
質問させてください

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 お知らせ 実行完了

938 :デフォルトの名無しさん:2023/07/08(土) 17:00:03.61 ID:IeBiUrvH.net
>>937
トリガーの設定してる?

939 :デフォルトの名無しさん:2023/08/22(火) 23:04:26.43 ID:+ZplHR9+.net
GASではなく、スプレッドシートの質問なのですが、もし適切なスレッドがあったら誘導お願いします

セルに例えば「130409.67」と入力し、
表示形式>数字>通貨(端数切り捨て)
に設定すると、小数点以下が切り捨てではなく四捨五入されてしまいます。
これはなにか私の使い方がおかしいのでしょうか?
また、他の方法でも良いので、内部的には小数点を保持しつつ、表示上だけ小数点以下を切り捨てる(非表示)する方法があれば教えてください。宜しくお願いします。

940 :デフォルトの名無しさん:2023/09/10(日) 09:27:06.36 ID:yM7j2B0I.net
オhル

941 :デフォルトの名無しさん:2023/09/22(金) 13:52:01.19 ID:dkRHHNCe.net
GTKは糞

942 :デフォルトの名無しさん:2023/09/24(日) 09:36:46.05 ID:2YTVyUlC.net
君は失格
やり治せ

943 :デフォルトの名無しさん:2023/10/20(金) 12:46:49.67 ID:/M3RKJCH.net
GAS抜きで

944 :デフォルトの名無しさん:2023/10/20(金) 20:23:13.56 ID:c9EoYnQA.net
>>939
=trunc(3.14, 0)
で3と表示されるはず

945 :デフォルトの名無しさん:2023/10/31(火) 16:30:00.40 ID:qmiHWWBC.net
>>944
ありがとうございます
それを入力したセル(A1)の隣に、
=A1×8
とすると、24と出るので、内部で小数点以下を保持してないようです

946 :898:2023/10/31(火) 17:43:19.30 ID:F7pL/7Za.net
>>945
truncは切り捨てかな。
というかカスタム表示形式の # じゃ駄目なん?

947 :デフォルトの名無しさん:2024/03/10(日) 15:35:26.40 ID:H28l+VF2.net
スプレッドシートについての質問です。

SBI証券のマイページからポートフォリオのcsvファイルをダウンロードすることができます。
GASにより、自動で、ポートフォリオの円グラフを作りたいのですが、スクリプトはコンテナバインドではなくスタンドアローンでないと駄目でしょうか?
毎日、csvファイルをダウンロードして、円グラフを描く予定なので、コンテナバインドだと駄目ですよね?

948 :デフォルトの名無しさん:2024/03/10(日) 15:38:07.27 ID:H28l+VF2.net
でもスタンドアロンにすると、スプレッドシートを開くときに、ファイルのIDを指定しないと駄目ですよね。
このIDが毎日変わることになると思いますが、この部分をどうすれば楽ができるでしょうか?

949 :デフォルトの名無しさん:2024/03/10(日) 15:55:50.28 ID:vw/rAwFk.net
なんでコンテナバインドじゃだめなの?
トリガーで1日1回実行すればいいんじゃないの

950 :デフォルトの名無しさん:2024/03/10(日) 16:29:51.77 ID:H28l+VF2.net
>>949

自動でダウンロードして来るとかそういうことを想定していますか?
そういう技術はありませんので、手動でダウンロードしてきて、Google Driveにアップロードする。
これを毎日やろうと考えています。
そうするとファイル自体が毎日変わりますし、IDも変わってしまうのではないかと思います。
バインドを新しい他のファイルに引き継ぐことはできませんよね?

951 :デフォルトの名無しさん:2024/03/10(日) 16:50:03.03 ID:vw/rAwFk.net
>>950
ファイルIDが変わってもファイルを保存するフォルダが固定なら
そのフォルダのファイル一覧を取得すればいいんでは?

952 :デフォルトの名無しさん:2024/03/10(日) 17:01:06.12 ID:H28l+VF2.net
>>951

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

ありがとうございました。

953 :デフォルトの名無しさん:2024/03/11(月) 11:33:26.37 ID:Voh59fAx.net
csvファイルに、

'+7441000

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

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

+7441000

と表示されます。

先頭に「+」がついていますが、扱いは文字列ではなく、数字です。
この「+」をGASを使って削除したいのですが、どうすればいいでしょうか?
このセルを選択した状態で「fx」の右隣をみると「'+7441000」となっています。

954 :デフォルトの名無しさん:2024/03/11(月) 21:30:14.93 ID:Voh59fAx.net
>>953

なんとか解決しました。

955 :デフォルトの名無しさん:2024/04/04(木) 12:51:32.09 ID:q67OTvc3.net
getUi().showModelessDialog()の挙動おかしくなった?
他をクリックしたら閉じるようになったし移動も出来なくなった
バグですか?

280 KB
新着レスの表示

掲示板に戻る 全部 前100 次100 最新50
名前: E-mail (省略可) :

read.cgi ver 2014.07.20.01.SC 2014/07/20 D ★