如何使用脚本构建条件格式?

时间:2021-02-01 03:43:08

标签: google-apps-script google-sheets

我正在使用谷歌脚本来管理谷歌管理员。下面是列出域中所有谷歌用户的脚本。

如果我直接在工作表上创建条件格式,则只要启动脚本,规则就会被删除。这就是为什么我想在脚本本身中包含条件格式,但它不起作用?。

基本上我想要的是:

  • 如果列的值是“超级管理员?”或“是委派管理员吗?”是 TRUE,那么我希望这些行以粗体红色着色。
  • 我正在尝试找出如何将 lastLoginTime 和 creationTime 的结果(在字符串 ISO8601 中转换为日期值,我知道如何使用公式进行转换,但我不知道如何使用脚本)

如果有人能指导我,我真的很感激。

非常感谢。

function listAllUser() {
  var sheet11 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("SheetNAME");
  var sheet11range = sheet11.getRange("I3:Q")
  sheet11range.clear()
 
  var data = [];// array to store values
  data.push(['Last Name','First Name','Email','orgUnitPath', 'is Suspended?','is Super Admin?','is Delegated Admin?', 'LastLoginTime','Creation']);// store headers
  var pageToken, page;
  
  do {
    page = AdminDirectory.Users.list({    
      domain: 'DomainNAME',    
      pageToken: pageToken,
    });
    var users = page.users;
    if (users) {
      for (var i = 0; i < users.length; i++) {  
        try{      
        var user = users[i];
        data.push([user.name.familyName,user.name.givenName,user.primaryEmail,user.orgUnitPath, user.suspended,user.isAdmin,user.isDelegatedAdmin, user.lastLoginTime , user.creationTime  ]);//store in an array of arrays (one for each row)}
    }catch (e){} 
       }} 
    pageToken = page.nextPageToken;
  } while (pageToken);
  sheet11.getRange(2,9,data.length,data[0].length).setValues(data).setVerticalAlignment("middle").setWrap(true);
  var t1 = sheet11.getRange("I1:P1").merge();
  var t1bis = t1.setValue("List of all USERS");
  var dated = sheet11.getRange("Q1")
  dated.setValue("Last updated: " + Utilities.formatDate(new Date(),Session.getScriptTimeZone(),'dd-MM-yy hh:mm'));
  var range = sheet11.getRange("I1:Q2");
  range.setFontWeight("Bold").setFontColor("Blue").setHorizontalAlignment("center").setVerticalAlignment("middle").setBackground("#beedda").setWrap(true);


  var isSuperAdm = sheet11.getRange("N3:N").getValue();
  var isDelegatAdm = sheet11.getRange("O3:O").getValue();
  if(isSuperAdm==true || isDelegatAdm==true){
    range.setFontWeight('bold').setFontColor('red')
  } 
  
}

2 个答案:

答案 0 :(得分:0)

在找了一些教程之后,我终于成功地得到了我想要的,格式化单元格:

  • 当 lastLoginTime 早于特定日期时
  • 当“是超级管理员?”的值时和“是委派管理员吗?”是真的

function cellsFormatting(){
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("SheetName");
  var range1 = sheet.getRange("A1:Q2");
  range1.setFontWeight("Bold").setFontColor("Blue").setHorizontalAlignment("center").setVerticalAlignment("middle").setBackground("#beedda").setWrap(true);
  var range2 = sheet.getRange ("A3:Q");
  range2.setVerticalAlignment('middle').setWrap(true);
}

function setRangeToRedBoldFont(cellRange){
  var sheet = SpreadsheetApp.getActiveSheet();
  var range = sheet.getRange(cellRange);
  var rule = SpreadsheetApp.newConditionalFormatRule()
    .whenTextEqualTo("TRUE")
    .setFontColor("#FF0000")
    .setBold(true)
    .setRanges([range])
    .build();
var rules = sheet.getConditionalFormatRules();
rules.push(rule);
sheet.setConditionalFormatRules(rules);
}

function setRangeToGrayItalicFont(cellRange){
  var sheet = SpreadsheetApp.getActiveSheet();
  var range = sheet.getRange(cellRange);
  var rule = SpreadsheetApp.newConditionalFormatRule()
    .whenFormulaSatisfied("=DATEVALUE(MID($P3;1;10)) + TIMEVALUE(MID($P3;12;8))<date(2018;8;31)")
    .setFontColor("#A9A9A9")
    .setItalic(true)
    .setRanges([range])
    .build();
var rules = sheet.getConditionalFormatRules();
rules.push(rule);
sheet.setConditionalFormatRules(rules);
}

function listAllUser() {
  var sheet11 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("SheetName");
  var sheet11range = sheet11.getRange("I3:Q")
  sheet11range.clear();
  cellsFormatting();
  
  var t1 = sheet11.getRange("I1:P1").merge();
  var t1bis = t1.setValue("List of all USERS");
  var dated = sheet11.getRange("Q1")
  dated.setValue("Last updated: " + Utilities.formatDate(new Date(),Session.getScriptTimeZone(),'dd-MM-yy hh:mm'));  //will input the date & time when the script was launched

  var data = [];// array to store values
  data.push(['Last Name','First Name','Email','orgUnitPath', 'is Suspended?','is Super Admin?','is Delegated Admin?', 'LastLoginTime','Creation']);// store headers
  var pageToken, page;
  
  do {
    page = AdminDirectory.Users.list({    
      domain: 'DomainNAME',
      pageToken: pageToken,
    });
    var users = page.users;
    if (users) {
      for (var i = 0; i < users.length; i++) {  
        try{      
        var user = users[i];
        data.push([user.name.familyName,user.name.givenName,user.primaryEmail,user.orgUnitPath, user.suspended,user.isAdmin,user.isDelegatedAdmin, user.lastLoginTime , user.creationTime  ]);//store in an array of arrays (one for each row)}
    }catch (e){} 
       }} 
    pageToken = page.nextPageToken;
  } while (pageToken); 
  sheet11.getRange(2,9,data.length,data[0].length).setValues(data);

  var formatRange = "I3:Q";
  setRangeToRedBoldFont(formatRange);
  setRangeToGrayItalicFont (formatRange);
}

答案 1 :(得分:0)

对于行颜色:

对于 user.isAdmin 和 user.isDelegatedAdmin

function colorLine() {
  const ss=SpreadsheetApp.getActive();
  const sh=ss.getSheetByName('SheetName');
  const rg=sh.getRange(3,9,sh.getLastRow(),9);
  const vs=rg.getValues();
  vs.forEach((r,i)=>{
    if(r[5]||r[6]) {
      sh.getRange(i+3,1,1,sh.getLastColumn()).setFontWeight('bold').setFontColor('red');
    }
  });

}
相关问题