0

スプレッドシートに 2 つのシートがあります。

外部 API からデータを取得する最初のシートは、トリガーを介して常に更新される今後のすべてのクラスを確認します。

ID | クラス | 開始 | 仕上げ | 説明 1 tig 溶接 2013 年 7 月 6 日 10:30 2013 年 7 月 6 日 12:30 クラスの説明 2 tig 溶接 2013 年 7 月 8 日 10:30 2013 年 7 月 8 日 12:30 クラスの説明 3 Serger Basics 7/8/ 2013 14:30 2013/7/6 16:30 クラス説明

2 つ目は、2 番目の列「カテゴリ」を追加する静的クラス リストです。

クラス | カテゴリ tig 溶接 金属加工 Serger Basics テキスタイル

両方のスプレッドシートのタイトルが一致するかどうかを確認し、一致する場合は、次のように最初のシートにカテゴリを追加します。

ID | タイトル | 開始 | 仕上げ | 説明 | カテゴリー

次に、そのスプレッドシートを JSON としてサードパーティの Web アプリに提供します。大変な作業のように聞こえますが、他の解決策は思いつきませんでした。これは進行中のコードで、私が立ち往生しているメモが付いています。

function listClasses(){
 var ss = SpreadsheetApp.getActiveSpreadsheet();
 var sheet = ss.getSheets()[0]; //list of all upcoming classes
 var sheet1 = ss.getSheets()[1]; //list of titles

 var data = sheet.getDataRange().getValues(); // read all data in the sheet
 var data1 = sheet1.getDataRange().getValues();

 for(n=1;n<data1.length;++n){
    var title1 = data1[n][0];
    var category = data1[n][1];

  // compare Check if title appears in column A of sheet 2.
  if (ArrayLib.find(data1, 0, title1) != -1) {
    // Yes it does, do something in sheet 0
    for( var row = data.length -1; row >= 0; --row )
      if (data[row][1] == title1){

          var id = data[row][0];
          var title = data[row][1];
          var start = data[row][3];
          var finish = data[row][4];
          var description = data[row][5];
          var category = data1[n][1];

  // and here is where I got stuck!
  data.appendRow([category]); 


}
        }

      }

    }
4

1 に答える 1

1

あなたのコメントから、一致する行に列を追加したいようです...一致が見つかったときに行配列要素に値を割り当てるだけで、配列レベルで非常に簡単に行うことができます。注意すべき唯一のことは、各行 (つまり、行を表す各配列) がまったく同じ長さでなければならないということです。そうしないと、シートに正しく書き戻すことができなくなります。

あなたが言及しなかった詳細の1つは、カテゴリ行が最後の行であるかどうか、および/またはスプレッドシートに「カテゴリ」の列名を持つヘッダーがあるかどうかです。

この最初のコードでは、あなたが持っていると仮定します。次に、単に使用できます

    data[row][6]=category;// because data[row][6] already exist in this array because the header defines a range width of (at least) 7 when you used getDataRange()
    ...
    // and after the loop just write back data to sheet like this
    sheet.getRange(1,1,data.length,data[0].length).setValues(data);

列「カテゴリ」が存在しない場合は、プッシュメソッドを使用してループ内から最初の実行時に各行に要素を追加して、各行に存在するようにする必要があります...次のようなもの:data[row][6]

if(data[row].length<7){data[row].push(' ')};// ensure that data[row][6] does exist

この行は、データ配列 (インデックス「行」) を反復するループに配置する必要があります。

あなたが提供したいくつかの情報でさらに先に進むのは少し難しいですが、正しい推測をしたことを願っています.

于 2013-07-08T23:07:17.943 に答える