実現したいこと
Google Apps Scriptで、スプレッドシートでチェックボックスに
チェックを入れた項目を別シートに転記するスクリプトを書いています。
以下の結果が欲しく模索していますが、初学者ゆえ手詰まりです。
とりあえず動くコードを書きましたが欲しい結果と違います。
どのようにすればこの結果を得られるでしょうか。教えて頂ければ幸いです。
###前提
訂正しました↓
[["groupA",true,"item1",false,"item2",false,"item3"],["groupB",true,"item4",false,"item5",false,"item6"],["groupC",false,"item7",false,"item8",true,"item9"]]
訂正ここまで↑
という配列があるとします。
上記の行はそれぞれスプレッドシート上の行に相当し
groupXから最後のitemNまでの各要素が各列に相当します。
訂正しました↓
得たい結果としては
- 頭にgroup名がきて
- 次にチェックボックスがtrueの右隣のセルのデータ
- trueは1行に複数あるものとします
これを別シートに改行しながら出力、つまり
groupの中からチェックをつけて選んだものだけをgroup名と共に一覧にしたいという事です。
欲しい結果
[ [ 'groupA', 'item1' ],
[ 'groupB', 'item5' ],
[ 'groupC', 'item9' ] ]
といった配列です。
この形ならforEachとappendRowで1行につき1つの配列
groupA|item1
groupB|item5
groupC|item9
と出力できることは確認しました。(|で区切られたデータは別のセルを表す)
訂正ここまで↑
trueやfalseはGoogleスプレッドシート
のチェックボックス機能を当てたセルです。
処理時間を短くしたいがためスプレッドシートのデータを
getValuesで二次元配列として取得した結果が
先頭のものです。
forEachやmap,filterなどを使えばなんとなくできるかも
いれないと思い試してみましたが初心者故うまくいきません。
###試したこと
GoogleAppsScript
1function practice() { 2 var ss = SpreadsheetApp.getActiveSpreadsheet(); 3 var prasheet = ss.getSheetByName('praList'); 4 var siyousyo = ss.getSheetByName('仕様書'); 5 var lastRow = prasheet.getLastRow(); 6 var lastCol = prasheet.getLastColumn(); 7 var ar = prasheet.getSheetValues(1, 1, lastRow, lastCol); 8 var choice = ar.map(function(ar){ 9 return ar.filter(function(val,i,arr){return arr[i-1] === true}); 10 }); 11 choice = choice.flat(); 12 siyousyo.getRange("A2").setValue(choice.join(',\n')); 13 console.log(choice.join(',\n')); 14 } 15//チェックがついた右隣のセルのデータが1つのセル出力された
###利用環境
wiondows10にて
Chrome V8 を搭載した新しい Apps Script ランタイム
ブラウザ chrome バージョン: 81.0.4044.138(Official Build) (64 ビット)
初登録、初質問で色々ご指摘あるかと思いますが、
よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー