将格式信息存储在数组中,然后将其应用于范围

时间:2016-08-17 18:08:14

标签: arrays google-apps-script

我尝试创建一个脚本,根据另一个表格中表格的格式自动格式化选择。我们的想法是,用户可以在格式表中为header,rowOdd和rowEven定义表格样式,然后使用该脚本轻松将其应用于选定的表格。

我设法让它工作,但只能应用一种格式(背景颜色)。

我根据this文章将代码读入数组。

正如您希望从下面的代码中看到的那样,我只能将一个格式化属性读入我的数组。

我想要做的是将所有格式化属性读入数组,然后一次性将它们应用到范围中。我是新手,如果我的代码很乱,我很抱歉!

function formatTable() {

  var activeRange = SpreadsheetApp.getActiveSpreadsheet().getActiveRange(); //range to apply formatting to
  var arr = new Array(activeRange.getNumRows());
  var tableStyleSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Formats"); //location of source styles
  var tableColours = {
    header: tableStyleSheet.getRange(1, 1, 1).getBackground(),
    rowEven: tableStyleSheet.getRange(2, 1, 1).getBackground(),
    rowOdd: tableStyleSheet.getRange(3, 1, 1).getBackground()
  } 

  for (var x = 0; x < activeRange.getNumRows(); x++) {
    arr[x]  = new Array(activeRange.getNumColumns());
    for (var y = 0; y < activeRange.getNumColumns(); y++) {
      x == 0 ? arr[x][y] = tableColours.header : 
      x % 2 < 1 ? arr[x][y] = tableColours.rowOdd : arr[x][y] = tableColours.rowEven;
      Logger.log(arr);
    }

  }
  activeRange.setBackgrounds(arr);
}

谢谢!

2 个答案:

答案 0 :(得分:0)

您是否知道可以将范围内的所有不同格式元素直接放入数组中?

E.g。

var backgrounds = sheet.getRange("A1:D50").getBackgrounds();
var fonts = sheet.getRange("A1:D50").getFontFamilies();
var fontcolors = sheet.getRange("A1:D50").getFontColors();

然而,遗憾的是,在一次调用中无法获得所有格式,因此您必须单独处理每个元素。然后,您可以一次性应用所有格式:

targetRng.setFontColors(fontcolors);
targetRng.setBackgrounds(backgrounds);

等等。

答案 1 :(得分:0)

我可能错了,但根据Class Range中给出的方法列表,目前尚不存在保存或存储格式详情的功能。

但是,您可能想尝试使用以下内容:

  • copyFormatToRange(gridId, column, columnEnd, row, rowEnd)copyFormatToRange(sheet, column, columnEnd, row, rowEnd),其中将范围的格式复制到指定位置。
  • moveTo(target),其中从此范围剪切并粘贴(格式和值)到目标范围。