将条件格式g应用于驱动器中Google表格中文件夹中的所有表格

时间:2018-11-05 09:52:07

标签: google-apps-script google-sheets

我把很多纸放在一个文件夹中。 我想将格式应用于所有工作表。例如将边框,将第一行加粗并应用条件格式。另一件事很完美,但是条件格式存在一些问题。它说TypeError:工作表不是XML对象。在每次开始条件格式化时。代码是:

      function ledgerformatting() {
    var fol = "1mg729p0ARzfxbdWTJQ23zELfeXQElP-v";
    var folders = DriveApp.getFolderById(fol).getFiles();
    while (folders.hasNext()) {
    var folder = folders.next().getId();
    var spreadsheet = SpreadsheetApp.openById(folder).getActiveSheet()
    spreadsheet.getRange('A1').activate();
    spreadsheet.getCurrentCell().setValue('date');
    spreadsheet.getRange('C1').activate();
    spreadsheet.getCurrentCell().setValue('debited');
    spreadsheet.getRange('D1').activate();
    spreadsheet.getCurrentCell().setValue('credited');
    spreadsheet.getRange('A1:E1').activate();
    spreadsheet.getActiveRangeList().setFontWeight('bold')
    .setHorizontalAlignment('right')
    .setBorder(null, null, true, null, null, null, '#000000',             SpreadsheetApp.BorderStyle.SOLID_THICK);
    spreadsheet.getRange('E:E').activate();
    var conditionalFormatRules = spreadsheet..getConditionalFormatRules();
    conditionalFormatRules.push(SpreadsheetApp.newConditionalFormatRule()
    .setRanges([spreadsheet.getRange('E1:E1000')])
    .whenCellNotEmpty()
    .setBackground('#B7E1CD')
    .build());
    spreadsheet.getActiveSheet().setConditionalFormatRules   (conditionalFormatRules);
    conditionalFormatRules = spreadsheet.getActiveSheet  ().getConditionalFormatRules();
    conditionalFormatRules.splice(conditionalFormatRules.length - 1, 1,    SpreadsheetApp.newConditionalFormatRule()
    .setRanges([spreadsheet.getRange('E1:E1000')])
    .whenFormulaSatisfied('=if')
   .setBackground('#B7E1CD')
   .build());
    spreadsheet.getActiveSheet().setConditionalFormatRules    (conditionalFormatRules);
     conditionalFormatRules = spreadsheet.getActiveSheet ().getConditionalFormatRules();
    conditionalFormatRules.splice(conditionalFormatRules.length - 1, 1,  SpreadsheetApp.newConditionalFormatRule()
    .setRanges([spreadsheet.getRange('E1:E1000')])
    .whenFormulaSatisfied('=i')
    .setBackground('#B7E1CD')
    .build());
    spreadsheet.getActiveSheet().setConditionalFormatRules (conditionalFormatRules);
    conditionalFormatRules = spreadsheet.getActiveSheet ().getConditionalFormatRules();
    conditionalFormatRules.splice(conditionalFormatRules.length - 1, 1,  SpreadsheetApp.newConditionalFormatRule()
    .setRanges([spreadsheet.getRange('E1:E1000')])
    .whenFormulaSatisfied('=$B1')
    .setBackground('#B7E1CD')
    .build());
    spreadsheet.getActiveSheet().setConditionalFormatRules (conditionalFormatRules);
    conditionalFormatRules = spreadsheet.getActiveSheet ().getConditionalFormatRules();
    conditionalFormatRules.splice(conditionalFormatRules.length - 1, 1,  SpreadsheetApp.newConditionalFormatRule()
    .setRanges([spreadsheet.getRange('E1:E1000')])
    .whenFormulaSatisfied('=$B1:B')
    .setBackground('#B7E1CD')
    .build());
    spreadsheet.getActiveSheet().setConditionalFormatRules (conditionalFormatRules);
    conditionalFormatRules = spreadsheet.getActiveSheet ().getConditionalFormatRules();
    conditionalFormatRules.splice(conditionalFormatRules.length - 1, 1, SpreadsheetApp.newConditionalFormatRule()
    .setRanges([spreadsheet.getRange('E1:E1000')])
    .whenFormulaSatisfied('=$B1:B2')
    .setBackground('#B7E1CD')
    .build());
    spreadsheet.getActiveSheet().setConditionalFormatRules(conditionalFormatRules);
    conditionalFormatRules = spreadsheet.getActiveSheet().getConditionalFormatRules();
    conditionalFormatRules.splice(conditionalFormatRules.length - 1, 1, SpreadsheetApp.newConditionalFormatRule()
    .setRanges([spreadsheet.getRange('E1:E1000')])
    .whenFormulaSatisfied('=$B1:B2=""')
    .setBackground('#B7E1CD')
    .build());
      spreadsheet.getActiveSheet().setConditionalFormatRules(conditionalFormatRules);
      conditionalFormatRules = spreadsheet.getActiveSheet().getConditionalFormatRules();
      conditionalFormatRules.splice(conditionalFormatRules.length - 1, 1, SpreadsheetApp.newConditionalFormatRule()
     .setRanges([spreadsheet.getRange('E1:E1000')])
     .whenFormulaSatisfied('=$B1:B2=""')
      .build());
     spreadsheet.getActiveSheet().setConditionalFormatRules(conditionalFormatRules);
      conditionalFormatRules = spreadsheet.getActiveSheet().getConditionalFormatRules();
      conditionalFormatRules.splice(conditionalFormatRules.length - 1, 1, SpreadsheetApp.newConditionalFormatRule()
     .setRanges([spreadsheet.getRange('E1:E1000')])
     .whenFormulaSatisfied('=$B1:B2=""')
     .setFontColor('#FFFFFF')
     .build());
      spreadsheet.getActiveSheet().setConditionalFormatRules (conditionalFormatRules);
    };
      }

1 个答案:

答案 0 :(得分:1)

我只更正了部分代码,所以这里有问题:

  1. 删除第18行上的..两个点。
  2. 以适当的方式第二次重命名变量,以防止在使用spreadsheet时使用sheet
  3. 仔细阅读文档
  4. 将检索到的对象放入变量(表格,范围,电子表格...)中,以防止您多次调用getActiveSomething()之类的函数。
  5. 对每个条件格式元素重复该过程,以使您的代码完全正常工作

所以这是更正的代码:

  function ledgerformattingCorrected() {
  var fol = "1mg729p0ARzfxbdWTJQ23zELfeXQElP-v";
  var folders = DriveApp.getFolderById(fol).getFiles();
  while (folders.hasNext()) {
    var folder = folders.next().getId();
    var sheet = SpreadsheetApp.openById(folder).getActiveSheet()
    sheet.getRange('A1').setValue('date');
    sheet.getRange('C1').setValue('debited');
    sheet.getRange('D1').setValue('credited');
    sheet.getRange('A1:E1').setFontWeight('bold')
      .setHorizontalAlignment('right')
        .setBorder(null, null, true, null, null, null, '#000000', SpreadsheetApp.BorderStyle.SOLID_THICK);
    var range = sheet.getRange('E:E');
  var conditionalFormatRules = sheet.getConditionalFormatRules();
  conditionalFormatRules.push(SpreadsheetApp.newConditionalFormatRule()
  .setRanges([range])
  .whenCellNotEmpty()
  .setBackground('#B7E1CD')
  .build());
  //continue pushing other format rules as so:
  //conditionalFormatRules.push(newConditionalFormatRule);
  sheet.setConditionalFormatRules(conditionalFormatRules);
  }
}

参考

Spreadsheet Service