0
function getColIndexByName(colName) {
  var sheet = SpreadsheetApp.getActiveSheet();
  var numColumns = sheet.getLastColumn();
  var row = sheet.getRange(1, 1, 1, numColumns).getValues();
for (i in row[0]) {
var name = row[0][i];
if (name == colName) {
  return parseInt(i) + 1;
    }
 }
    return -1;
   }

function sendtoContacts () {

 var source = SpreadsheetApp.getActiveSpreadsheet();
 var ss = source.getActiveSheet();
 var row = ss.getActiveRange().getRowIndex();

 var group = ContactsApp.getContactGroup('From Googlesheet');
 var givenName = ss.getRange(row, getColIndexByName("First")).getValue();
 var familyName = ss.getRange(row, getColIndexByName("Last")).getValue();
 var email = ss.getRange(row, getColIndexByName("Work Gmail")).getValue();
 var Homeemail = ss.getRange(row, getColIndexByName("Personal Email")).getValue();
 var company = ss.getRange(row, getColIndexByName("Company")).getValue();
 var title = ss.getRange(row, getColIndexByName("Title")).getValue();
 var phone = ss.getRange(row, getColIndexByName("Phone")).getValue();
 var mobile = ss.getRange(row, getColIndexByName("Mobile")).getValue();
 var newContact =  ContactsApp.createContact(givenName, familyName, email);
 var contactid = newContact.getId();
 var addy = ss.getRange(row, getColIndexByName("Address")).getValue();
 var city = ss.getRange(row, getColIndexByName("City")).getValue();
 var prov = ss.getRange(row, getColIndexByName("Prov")).getValue();
 var pc = ss.getRange(row, getColIndexByName("Postal Code")).getValue();
 var address = addy + ", " + city + ", " + prov + ", " + pc


 var AltContact = ss.getRange(row, getColIndexByName("Alt Contact Name")).getValue();
 var AltRelation = ss.getRange(row, getColIndexByName("Alt ContactRelation")).getValue();
 var AltPhone = ss.getRange(row, getColIndexByName("Alt Contact Phone")).getValue();
 var AltWork = ss.getRange(row, getColIndexByName("Alt Contact Wk No")).getValue();
 var AltMobile = ss.getRange(row, getColIndexByName("Alt Contact Mobile")).getValue();

   newContact.addToGroup(group);
   newContact.addAddress("Home", address);
   newContact.addCompany(company, title);
   newContact.addEmail("Home", Homeemail);
   newContact.addCustomField("Emergency Contact", AltContact);
   newContact.addCustomField("Emergency Contact Relation", AltRelation);
   newContact.addCustomField("Emergency Contact Work", AltWork);
   newContact.addCustomField("Emergency Contact Mobile", AltMobile);

      for ( var i = 0; i < phone.length ; i++){
         if (phone[i][3] != ''){ newContact.addPhone("HOME", phone); return}};   

      for ( var i = 0; i < mobile.length ; i++){
         if (mobile[i][44] != ''){ newContact.addPhone("Mobile", mobile); return}};

        }


  function MakeAllContacts() {
   var source = SpreadsheetApp.getActiveSpreadsheet();
   var ss = source.getActiveSheet();
   var startRow = 2;  // First row of data to process
   var numRows = 100;   // Number of rows to process


   for (row = 2; row < 6; row++)
   {

      sendtoContacts();

       }
    return
      }

ここでは MakeAllContacts() でエントリを複製していますが、シート内のすべての行に RowIndex を変更して、シート内のすべての連絡先を追加したいと考えています。これは私が作ったビデオでそれを説明するビデオであり、これは私の実際のシートGoogle Sheetへのリンクです。1行をシート内のすべての行にするのではなく、頭をループさせることができれば、共有を開始したいコードがかなりあります。助けてくれてありがとう。

4

1 に答える 1

0

関数sendtoContacts ()は使用ss.getActiveRange().getRowIndex();する行を決定するために使用していますが、スクリプトのどこにも行をアクティブに設定していないため、メインループ全体で同じデータを使用し続けますMakeAllContacts().

考えられる解決策は 2 つあります。

  • 反復ごとにアクティブな行が変わるようactivate()に、関数ループで使用します ( )MakeAllContacts()ss.getRange(row,1).activate()
  • sendtoContacts ()以下のような関数でrowIndexパラメーターを使用します。

function MakeAllContacts() {
  var source = SpreadsheetApp.getActiveSpreadsheet();
  var ss = source.getActiveSheet();
  var startRow = 2;  // First row of data to process
  var numRows = 100;   // Number of rows to process
  for (row = 2; row < numRows; row++){
    sendtoContacts(row);
  }
}

sendtoContacts ()関数function を次のように変更します。

function sendtoContacts (row) { // row as parameter
  var source = SpreadsheetApp.getActiveSpreadsheet();
  var ss = source.getActiveSheet();
  ...

とはいえ、このアプローチはあまり効率的ではありません。各データは、特に遅い単一のgetRange/getValue を使用してスプレッドシートで読み取られるためですgetValues()代わりに配列の内容を繰り返します。

于 2013-10-20T07:32:07.347 に答える