【问题标题】:Apply a "row banding" theme to a range将“行带”主题应用于范围
【发布时间】:2018-07-30 23:06:00
【问题描述】:

我是 Google Apps 脚本的初学者,但使用它来自动执行一些简单的重复任务。我有几个电子表格,我每周都会复制内容并将它们导出为.xls 文件,然后发送给我的客户。

我正在尝试将交替颜色应用于从另一张纸复制的范围,但我完全卡住了。如何使用applyRowBanding 方法正确设置bandingTheme?我应该在代码的最后一行使用什么正确的语法?

我的代码:

function copyRange (SourceSSID, SourceRange, TargetSheetName, bandingTheme) {
  var sheetSource = SpreadsheetApp.openById(SourceSSID);
  var sheetTarget = SpreadsheetApp.openById("bla-bla");
  var source =  sheetSource.getRange(SourceRange);
  var target_ss = sheetTarget.getSheetByName(TargetSheetName);
  var values = source.getValues();
  var target = target_ss.getRange(1, 1, values.length, values[0].length);
  target.clear();

  target.setValues(values);

  target.applyRowBanding ();
}

【问题讨论】:

    标签: google-apps-script syntax enums google-sheets


    【解决方案1】:

    如果您的方法参数bandingThemehere 列出的枚举之一,您可以使用apply___Banding(BandingTheme theme) 方法签名简单地应用它:

    target.applyRowBanding(bandingTheme);
    

    根据文档,以上内容等同于这一行:

    target.applyRowBanding(bandingTheme, true, false);
    

    (换句话说,除了交替的行颜色之外,默认行为是为页眉而不是页脚着色。)

    您可以确保以前不存在任何现有主题(只有一种交替颜色 - 无论是来自列还是行 - 可以在任何给定时间出现,否则会引发错误)。

    target.getBandings().forEach(function (banding) {
      banding.remove();
    });
    /**
     * set the new banding theme
     * ....
     */
    

    如果您想设置自定义条带主题,可以从其中一个主题设计开始。请注意,apply___Banding 方法返回它们应用的 Banding 对象。如果绑定此返回值(或链接方法),则可以使用其类方法对其进行修改。

    const newBanding = target.applyRowBanding(SpreadsheetApp.BandingTheme.BLUE);
    // newBanding is now a Banding that was instantiated with the "Blue" template.
    // Color the header column:
    newBanding.setHeaderColumnColor('teal');
    
    // Equivalent:
    target.applyRowBanding(SpreadsheetApp.BandingTheme.BLUE).setHeaderColumnColor('teal');
    

    请注意,在行带主题中为非标题列设置颜色不起作用。同样用于在列带主题中设置非标题行颜色。


    如果您的 bandingTheme 参数不是主题枚举之一,那么您必须提供有关它是什么的更多详细信息,以便获得帮助您将其转换为可用电子表格服务方法的答案。

    【讨论】:

    • 实际上这是我的问题 - 使用什么作为 bandingTheme 参数。我尝试使用字符串参数(like 'BLUE', 'BandingTheme.BLUE'),或BandingTheme.BLUE
    • @EugeneCherepanov 如我的回答所示,您必须使用正确的类枚举范围:SpreadsheetApp 是与 Apps Script Spreadsheet Service 相关的所有类的入口点。
    【解决方案2】:

    这是一个简单的函数,它可以删除现有的条带,然后将交替颜色应用于整个工作表。此函数严重依赖 Google Apps 脚本 Range Class

    function applyRowBanding() {
      let sheet = SpreadsheetApp.getActiveSheet();
      let range = sheet.getRange(1, 1, sheet.getLastRow(), sheet.getLastColumn());
      range.getBandings().forEach(banding => banding.remove());
      range.applyRowBanding(SpreadsheetApp.BandingTheme.LIGHT_GREY, true, false);
    }
    

    【讨论】:

    • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
    猜你喜欢
    • 2012-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多