0

標準のエクスポート ファイルではうまくいかないので、Google の連絡先とそのグループを Google スプレッドシートにエクスポートしたいと考えています。私のデータセットは過剰ではありません (32 のグループと 600 の連絡先)。私は何を間違っていますか?このエラーが発生しないように、命令の数を制限するにはどうすればよいですか?


function GetGroups() {

  var ss=SpreadsheetApp.getActiveSpreadsheet();
  var blad6=ss.getSheets()[6];
  var vId;
  var vGroep;
  var lijn5=2;

  var contact = ContactsApp.getContacts();

  blad6.clearContents();
  blad6.getRange("A1").setValue("Naam");
  blad6.getRange("B1").setValue("Groep");
  blad6.getRange("C1").setValue("ID");

for (var i=0;i<contact.length;i++) {
    sleep(500);
    vId=contact[i].getId();
    vGroep=contact[i].getContactGroups();

    for (var j=0;j<vGroep.length;j++) {
      blad6.getRange("A" + (lijn5)).setValue(contact[i].getFullName());
      blad6.getRange("B" + (lijn5)).setValue(vGroep[j].getName());
      blad6.getRange("C" + (lijn5)).setValue(vId);
      lijn5++;
    }
  }
}

おかげで、ほとんどの問題が解決しました。ただし、このセクションではまだ割り当て超過エラーが発生します。どうして?あなたがアドバイスしたように、私は配列を構築しています

function HaalGroepenOp() {

  var ss=SpreadsheetApp.getActiveSpreadsheet();
  var blad6=ss.getSheets()[6];
  var resultaat=new Array();

  var vId;
  var vGroep;
  var lijn=1;

  var contact = ContactsApp.getContacts();

  blad6.clearContents();
  resultaat[0]=[["Naam"],["Groep"],["ID"]];

for (var i=0;i<contact.length;i++) {
    vId=contact[i].getId();
    vGroep=contact[i].getContactGroups();

    for (var j=0;j<vGroep.length;j++) {
      resultaat[lijn]=[[contact[i].getFullName()],[vGroep[j].getName()],[vId]];
      lijn++;
    }
  }
  blad6.getRange(1,1,lijn,3).setValues(resultaat);
}
4

1 に答える 1

3

個々の項目ごとに setValue を使用してスプレッドシートを呼び出す回数が多すぎます。

配列を作成してから、setValues() を使用して配列をスプレッドシートに割り当てる必要があります。

  blad6.getRange("A1").setValue("Naam");
  blad6.getRange("B1").setValue("Groep");
  blad6.getRange("C1").setValue("ID");

次のようにする必要があります。

blad6.getRange("A1:C1").setValues([["Naam","Groep","ID"]]);

同様に、ループで配列を作成し、setValues() を使用して 1 つのバッチで配列をスプレッドシートに割り当てる必要があります。

スクリプトの最適化を参照してください。

于 2012-05-16T16:56:22.097 に答える