0

私はGoogle Appsを使い始めたばかりで、データの再フォーマットに非常に苦労しています。

Google スプレッドシートに出力するフォームを作成しました。フォームは 6 つの質問をし、その 6 つの質問のセットを 5 回尋ねます。現在、出力には 30 列のデータが表示されます。それを 1 つのデータ リストに再フォーマットできる Google Apps Script を構築したいので、各送信は 30 列幅の 1 行のデータではなく、6 列幅の 5 行のデータに変換されます。

追加の微調整として、列 A には提出日が表示されます。その提出のデータの行ごとにこれを繰り返したいと思います。また、各送信には最大 5 つのエントリ (それぞれ 6 つのデータ) を含めることができますが、1、2、3、または 4 つだけ含めることもできます。

ここに私が取り組んでいる出力があります:

https://docs.google.com/spreadsheet/ccc?key=0AltfQKymTKF2dGRrMU50ZkU3MGhIUHlvSFdBMDd2MWc&rm=full#gid=0

式は次のように言うべきだと思います:

Look at Column H
Find first instance where cell is not blank
Copy that and 6 cells over
Paste
Set the original copied cells to blank
i + 1
repeat

then repeat the entire process in Column M
then repeat the entire process in Column T
etc.

アイデアがあれば助けてください!

4

1 に答える 1

0

「フォーム送信時」トリガーを使用すると、フォームからのデータも変数として使用できます。スプレッドシート フォーム送信イベントについては、こちらのドキュメントを参照してください。

これらの変数を使用して、2 番目のシートで必要なスプレッドシートの配置を作成し、30 列をそのままにしておく必要があります...

最善のアプローチは、おそらく適切なデータを使用して 2D 配列を作成し、それをこのシートに一度に書き込むことです (別のスプレッドシートに書き込むこともできます...)。

これは、答えが空でない場合、5 x 5 の配列にデータをプッシュすることで、セットアップが非常に簡単になるはずです。

このようなもの(テストされていません)

function formSubmit(e) {
  var data = []
  for(n=0;n<5;++n){
    var row = []
    if(e.values[3+n]!=''){  // if first element of serie n is not empty
      for(c=0;c<6;++c){
      row.push(e.values[3+n+c]);// build row n with 6 colums (0 to 5)
        }
    }else{continue}
  data.push(row);// add row n to data  (0 to 4)
}
  SpreadsheetApp.getActiveSpreadsheet().getSheets()[1].getRange(1,1,data.length,data[0].length).setValues(data);// write data to sheet #2
}

編集: 5 と 6 を混同しました。6 つの回答の 5 行を処理するようにスクリプトを変更しました...最初のバージョンを見た場合は申し訳ありません;-)

于 2013-05-08T18:14:07.207 に答える