我尝试创建一个脚本,根据另一个表格中表格的格式自动格式化选择。我们的想法是,用户可以在格式表中为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);
}
谢谢!
答案 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)
,其中从此范围剪切并粘贴(格式和值)到目标范围。