Заголовки в Google Скрипте отображаются неправильно

#javascript #google-apps-script #google-sheets #spreadsheet

Вопрос:

Я хочу запустить этот скрипт, который выводит информацию из объявления в электронную таблицу. Но я также хочу добавить заголовки в первую строку, однако, когда я запускаю этот скрипт, он замораживает первую строку, но вместо добавления имен заголовков он просто замораживает имя первого лица, адрес электронной почты, телефон, электронную почту и т. Д.. Есть ли способ указать основную функцию для вывода, начиная со строки 2? или есть лучший способ отформатировать это так, чтобы заголовки входили правильно?

 function writeToSpreadsheet(){
    var values = [];
    var users = AdminDirectory.Users.list({domain:'domain.com'}).users; 
    for (var i=0; i<users.length; i  ){
      values.push([users[i].name.fullName, getExternalID(users[i].externalIds || []), getPhones(users[i].phones || []),getDeviceName(users[i].organizations || []) ]);
      createHeaders();
    }

  
    var spreadsheetUrl = 'docs.googlesheet.com';
      SpreadsheetApp.openByUrl(spreadsheetUrl).getSheets()[0].getRange(1, 1, values.length, values[0].length).setValues(values);
   
  }  
      
  
  function getExternalID(arr) {
    return arr.map(function(ExternalIDsObj) {
      return ExternalIDsObj.value;
    }).join(', ')   ('@email.com'); 
  }
          
  function getPhones(phones) { 
    return phones
      .map(phone => {
        const value = phone.value
        const type = phone.type.replace('_', ' ')
        return `${value} (${type})`
      })
      .join('n');           
  }                                      
  
  function getDeviceName(arr) {
    return arr.map(function(OrganizationsObj) {
      return OrganizationsObj.costCenter;
    }).join(', ') ; //Cost Center = Device
  }
  
  
 function createHeaders() {
    var ss = SpreadsheetApp.openByUrl('https://docs.googlesheet.com');
    var sheet = ss.getSheets()[0];
  
    // Freezes  first row
    sheet.setFrozenRows(1);
    // header values
    var values = [
      ["NAME", "EMAIL", "PHONE NUMBER", "DEVICE"]
    ];
  
    // Set the range of cells
    var range = sheet.getRange("A1:D1");
  
    // Call the setValues method on range and pass in our values
    range.setValues(values);
  }
 

Ответ №1:

Есть ли способ указать основную функцию для вывода, начиная со строки 2

В writeToSpreadsheet() :

Изменить:

 SpreadsheetApp.openByUrl(spreadsheetUrl).getSheets()[0].getRange(1, 1, values.length, values[0].length).setValues(values);
 

Для:

 SpreadsheetApp.openByUrl(spreadsheetUrl).getSheets()[0].getRange(2, 1, values.length, values[0].length).setValues(values);
 

Кроме того, нет абсолютно никаких причин выполнять createHeaders несколько раз в for цикле, так как вам нужно только один раз установить и заморозить заголовки.


Полный код writeToSpreadsheet :

 function writeToSpreadsheet(){
    var values = [];
    var users = AdminDirectory.Users.list({domain:'domain.com'}).users; 
    for (var i=0; i<users.length; i  ){
      values.push([users[i].name.fullName, getExternalID(users[i].externalIds || []), getPhones(users[i].phones || []),getDeviceName(users[i].organizations || []) ]);          
    }    
    createHeaders(); // modified position
    var spreadsheetUrl = 'docs.googlesheet.com';
    SpreadsheetApp.openByUrl(spreadsheetUrl).getSheets()[0].getRange(2, 1, values.length, values[0].length).setValues(values); // modified code    
  }