23/02/18 18:58:41.14 W3nKwjDO.net
>>905
自己解決。
というか諦めて別シートに呼び出した後substituteとxlookupの組み合わせで無理やり置換したのを表示させました。
907:デフォルトの名無しさん
23/02/19 14:19:59.95 bukleA+Y.net
>>905
日立?
908:デフォルトの名無しさん
23/02/19 22:06:54.53 sztA44Ir.net
>>905
spliceで置き換える
URLリンク(gray-code.com)
909:デフォルトの名無しさん
23/02/20 02:05:22.77 6OqVkYRD.net
>>908
ありがとうございます!spliceメソッド使ってみます。
その前に1つずつ検索かけるのに手古摺ってますが、なんとかやってみたいと思います。
910:898
23/02/20 16:04:41.81 4jGYSd8p.net
駄目でした…
includesにしてもmatchにしても配列[ ]で指定するとうまく動いてくれません。
配列を作らずfor文で無理やりセルを置換させるという荒業で解決しましたが時間がかかり過ぎて実用的でなく。
やりたいこと
table[[あ],[か],[さ],[た]...]
before[あ][い]...
after[ア][イ]...
以上の配列があり、
tableに対しbefore[i]を総当りで検索し一致したらafter[i]に置き換える。
911:デフォルトの名無しさん
23/02/20 18:43:52.85 czK6pNoa.net
>>910
やりたいことがいまいちわからん
こういうこと?
# ひらがなをカタカナに変換
table = [['あ','ア'], ['い','イ'], ['う','ウ'], ['え','エ'], ['お','オ'] ];
before = ['あ','い','う','え','お'];
after = before.map(b => table.find(a => b === a[0])[1]);
912:898
23/02/20 18:49:29.88 83YdaF3i.net
ありがとうございます。配列の中身は適当です…。
表と配列2種類の3つの要素があって、表にある配列1の要素を見つけたら配列2に置き換えるということをしたかったのです。
ですがお陰様でなんとかなりました!
二次元配列をflat()で一次元にして、splice使いました。
その後再度2次元配列に戻して元の形に直しました。
913:898
23/02/21 00:26:18.85 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:デフォルトの名無しさん
23/02/21 02:43:28.40 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
23/02/21 08:58:31.52 B3qxCQs3.net
>>914
そのarray[i][j]の[j]を入れるとindexOfにしてもincludesにしてもうちの環境?では何故かエラー出て読み込めなかったんですよ。(
確かcannot read properties of undefinedだった筈)
それ外すとエラーなく読んだので仕方なくflat入れた次第です。
因みに
arrayX=array[x]
arrayY=array[y]
みたいに入れ子しても駄目でした。
916:898
23/02/21 09:10:16.56 B3qxCQs3.net
確認したらエラー全然違うし書いてること散々でした
訂正
出てたエラーは多分is not defined
下の入れ子は
arrayX=array[x]
arrayY=arrayX[y]
みたいにしても同じエラーだったかと。
917:デフォルトの名無しさん
23/02/21 23:07:45.74 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:デフォルトの名無しさん
23/02/21 23:08:33.93 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
23/02/22 11:50:37.27 7vReBJfV.net
>>917-918
何度もありがとうございます。
仰るとおり2度目の添字は一切読み込んでくれないので…
>>918のmap参考にしながら勉強させていただきます。
とりあえず長くなってしまったのでこの辺りで。また不具合出てきたら改めて質問したいと思います。
ありがとうございました!
920:デフォルトの名無しさん
23/02/28 21:38:42.26 8PRLUyLU.net
スプレッドシートの共有で閲覧権限を持っている人の
印刷は可能でファイルのダウンロードだけ禁止することは可能でしょうか?
921:デフォルトの名無しさん
23/03/01 10:13:26.28 NPxLOyBL.net
共有アイテムのファイルにスターをつける方法を教えてください
宜しくお願いしますm(_ _)m
922:デフォルトの名無しさん
23/03/01 14:17:21.21 csCK6+UB.net
sheetクラスを取得する方法ってgetSheetByNameとgetActiveSheetしかないよね?
getSheetBySheetIdがないのが謎なんだけどシートはシート名で管理するしかない?
923:914
23/03/12 00:26:03.80 ZZBXPzbK.net
>>921
自己解決しました
924:デフォルトの名無しさん
23/03/24 19:19:34.21 GCLzu5nr.net
Rangeオブジェクトから、セルアドレスの文字列を取得したい場合
Excelならr.Address()で相対参照や絶対参照を取得できますが
GASで同じようなことできるメソッドあります?
getA1Notation()だと相対アドレスでしか取得できないようで…
925:デフォルトの名無しさん
23/03/24 20:40:28.68 h6PMjTMa.net
>>924
よく分かってないけどそれ意味あるの?
ただの文字列なんだから相対も絶対もないような
926:デフォルトの名無しさん
23/03/25 11:52:56.28 TC3JXJ5y.net
>>925
例えば
A1のRangeオブジェクトから
$A$1という文字列を取得できないかなと
GASから条件付き書式を設定するのに使いたいです
なぜ使いたいかというと
複数人で編集してコピペを繰り返すと条件付き書式が破壊されてしまうので
それを上書きリセットするためです
逆に、条件付書式だけロックかけて切り取ったり貼り付けたり出来ない設定ができるならそれで十分なのですが…
927:デフォルトの名無しさん
23/03/25 17:53:03.57 nYxwu6kr.net
>>926
>複数人で編集してコピペを繰り返すと条件付き書式が破壊されてしまうのでそれを上書きリセットするためです
通常の書式ならonEditで変更されたセルの書式を変更するだけでいいけど
条件付き書式をGAS上で扱ったことなかったから調べたけどちょっと面倒だね
そんでよくよく考えてみたらそもそもGAS使うならonEditで書式変更すればいいだけだから条件付き書式を使う必要がないと思った
928:デフォルトの名無しさん
23/04/04 12:37:38.49 dAPefWGR.net
スプレッドシートにスクリプト作成して権限付与して動作するように設定したあと
そのスプレッドシートをコピーするとスクリプトもコピーされるようですが
スクリプトの権限やトリガーは設定しなおしが必要のようです。
イメージ的には、vba付のExcelをコピーして別ファイルとして保存して
毎月のデータを作成していく、みたいなことがしたいんですが
その辺コピーするだけで全部引き継がれるみたいな設定ないのでしょうか?
929:デフォルトの名無しさん
23/04/11 18:45:08.89 u8YBlLPL.net
類似画像を判別できるようなライブラリとか公開されてるコードありますか?
検索するとpythonだとImageHashってライブラリがあるんだけどGASで同じようなことしたい
930:デフォルトの名無しさん
23/04/21 16:25:28.26 vnxhj4My.net
ごめんgoogleスプレッドシートの質問スレがみつからずこちらで質問させてください。
シートのある列をユーザーごとの閲覧を制限かけたい
有効な方法ありますか?
931:デフォルトの名無しさん
23/04/21 16:53:56.40 8VcMj5ya.net
閲覧の制限はファイル単位でしか出来ないでしょ
シート、セル(列/行)単位は編集の制限しか出来ない
932:デフォルトの名無しさん
23/04/21 17:40:05.18 vnxhj4My.net
ありがとうございます。
確かに「表示」→「保護されている範囲」でできそうだったけど。やっぱりだめでした。
諦めて、もう一つリンクしたファイルのシート作ってそちらに閲覧されたくない列を追加します。
933:デフォルトの名無しさん
23/05/02 21:52:22.95 39G20EoK.net
Googleカレンダーに予定を追加するプログラムを使ってるんだけど、「場所を追加」ちゃんと場所を追加したいです
以下詳細
普通に手作業でGoogleカレンダーに予定を追加するときは、「場所を追加」に場所の名前を入力すると候補が出てきて、そこから選ぶと、そこに間に合うためには何時に家を出ればいいかの通知が来たり、Android版のGoogleカレンダーだと予定の背景がその場所の写真になったりします。
で、GASで予定を追加するとき、場所を指定するためにGoogleマップのURLを使ってるんだけど、それだとURLが表示されるのみで、上記の通知とか背景写真とかが実行されません。
公式ドキュメントでも {location: 'Conference Room'}とされており、Googleマップ上の場所を使う気がなさそうです。
ちゃんとした「場所の追加」は、ウェブ上でマウスで操作しないとできないのでしょうか?
934:デフォルトの名無しさん
23/05/03 00:25:10.26 2fvruydV.net
>>933
URLじゃなくてその場所の名前か住所、もしくは緯度経度を入れればいいんじゃないの?
935:デフォルトの名無しさん
23/05/03 03:09:39.55 CT7gAj9T.net
>>934
それが名前や住所を入れても、その文字列が表示されるだけのようです
こんな感じ
URLリンク(i.imgur.com)
ブラウザかアプリで場所を選択した時には場所と認識されるのか、こう表示されます
URLリンク(i.imgur.com)
936:デフォルトの名無しさん
23/05/16 22:03:10.90 9Kd/3stA.net
ゲッ!!(/||| ̄▽)y-ξ⌒◇ヾ( ̄  ̄;)ジュッ
937:デフォルトの名無しさん
23/07/08 12:42:20.50 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:デフォルトの名無しさん
23/07/08 17:00:03.61 IeBiUrvH.net
>>937
トリガーの設定してる?
939:デフォルトの名無しさん
23/08/22 23:04:26.43 +ZplHR9+.net
GASではなく、スプレッドシートの質問なのですが、もし適切なスレッドがあったら誘導お願いします
セルに例えば「130409.67」と入力し、
表示形式>数字>通貨(端数切り捨て)
に設定すると、小数点以下が切り捨てではなく四捨五入されてしまいます。
これはなにか私の使い方がおかしいのでしょうか?
また、他の方法でも良いので、内部的には小数点を保持しつつ、表示上だけ小数点以下を切り捨てる(非表示)する方法があれば教えてください。宜しくお願いします。