0

サプライヤーのリストを含むスプレッドシートからテーブルを作成するスクリプトを作成しようとしています。スプレッドシートには 1000 を超えるエントリがあるため、スクリプトの処理が非常に遅くなります。ここにコードがあります

function SupplerAnalysis() {
 //Importing data
 var ss = SpreadsheetApp.getActiveSpreadsheet();
 var sheet = SpreadsheetApp.getActiveSheet();
 var data = sheet.getDataRange().getValues();

 //Creating a sheet
 if (ss.getSheetByName("Analysis") !=null) {
 //Logger.log('exists');
 } else {
 //Logger.log('Creating new');
  ss.insertSheet("Analysis");
 }
 var sheetNumber = ss.getSheetByName("Analysis").getIndex() - 1;
 ss.getSheetByName("Analysis").clear(); 
 var newsheet = ss.getSheets()[sheetNumber];
 var newdata = newsheet.getDataRange().getValues();

 newsheet.getRange(1, 1).setValue('Suppliers');

 //Get list of suppliers
 for (var s = 1; s < data.length; s++) {
 var supplier = data[s][3];
 var z = 1;
 newdata = newsheet.getDataRange().getValues();
   for (var r = 1; r < newdata.length;r++) {
      if (supplier === newdata[r][0]) {
          z = 2;
      } else { Logger.log(r);}
    }
   if (z === 1) {
       newsheet.getRange(r+1, 1).setValue(supplier);
   } else if ( z > 1 ) { Logge.log('Error');
   }
  }

列データ[s][3] は、さまざまなジョブのサプライヤーのリストです。1,000点以上の応募があり、合計で約160社のサプライヤーがいます。このスクリプトの実行には約 5 分かかりますが、これは非常に遅く効果的ではありません。

このプロセスを高速化するためにコードを変更するにはどうすればよいですか? NewCategoryFilter からの出力をテーブルに取得する方法はありますか?

4

2 に答える 2

1

ループで API を呼び出さないでください。

function SupplerAnalysis() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = SpreadsheetApp.getActiveSheet();
  var data = sheet.getDataRange().getValues();
  var newsheet;

  if ((newsheet=ss.getSheetByName("Analysis")) == null) 
    newsheet = ss.insertSheet("Analysis");
  else newsheet.clear();

  var supplierList = [['Suppliers']];

  for (var s = 1; s < data.length; s++) {
    for (var r = 1; r < supplierList.length; r++)
      if (data[s][3] == supplierList[r][0]) break;
    if (r == supplierList.length) supplierList.push([data[s][3]]);
  }

  newsheet.getRange(1,1,supplierList.length,1).setValues(supplierList);
}

タイプミスに気をつけてください - これを入力したところです。

サプライヤ名が正当なオブジェクト キーではない可能性があるため、サプライヤをオブジェクト キーに変換することには、多少のリスクが伴う可能性があります。

于 2013-07-17T08:47:57.160 に答える