所需行为
我希望能够将填充属性值应用于整个表,而不仅仅是单个单元格。
实际行为
我可以将padding属性值应用于单个单元格,但不能将整个表格应用。
我尝试过的事情
我用:
创建一个表var header_table = body.insertTable(0, cells);
这是使用insertTable(childIndex, cells)类的Body方法并返回Table。
Table类有一个名为setAttributes(attributes)的方法"sets the element's attributes"
。
然后我尝试使用以下内容设置表的属性:
// BEGIN define style
var header_table_style = {};
header_table_style[DocumentApp.Attribute.FONT_FAMILY] = 'Arial';
header_table_style[DocumentApp.Attribute.PADDING_BOTTOM] = 0;
header_table_style[DocumentApp.Attribute.PADDING_LEFT] = 0;
header_table_style[DocumentApp.Attribute.PADDING_RIGHT] = 0;
header_table_style[DocumentApp.Attribute.PADDING_TOP] = 0;
// END define style
// apply the style to the table
header_table.setAttributes(header_table_style);
结果是font-family
已应用但padding
未被应用,甚至认为padding
位于Enum Attributes列表中。
但是,如果我尝试将属性应用于单个单元格,则应用填充:
header_table.getCell(0, 0).setAttributes(header_table_style);
header_table.getCell(0, 1).setAttributes(header_table_style);
问题
01)如何将属性应用于整个表格?
02) 奖金问题:为什么Table方法的所有官方代码示例都与使用Table类的方案没有具体关系? (example)
03) 奖金问题:为什么有getRow(rowIndex)表方法而不是getColumn(columnIndex)
方法?如何将列的所有内容集中在一起?
修改:
顺便说一下,我申请样式的其他类似尝试都不起作用 - 我将它们包含在下面,因为它们都可能指向对某些方法如何工作的单一误解。
a)尝试通过MARGIN_TOP
在段落前添加5个点空格 - (结果:应用了所有其他样式,MARGIN_TOP
除外):
var title_text = body.insertParagraph(2,"Hello");
title_style = {};
title_style[DocumentApp.Attribute.FONT_FAMILY] = 'Roboto Condensed';
title_style[DocumentApp.Attribute.FOREGROUND_COLOR] = '#999999';
title_style[DocumentApp.Attribute.FONT_SIZE] = 18;
title_style[DocumentApp.Attribute.MARGIN_TOP] = 5; // DOESN'T WORK
title_text.setAttributes(title_style);
然而,这有效:
title_text.setSpacingBefore(5);
b)尝试更改表格的背景颜色(结果:段落的背景颜色发生变化,而不是表格):
another_table_style = {};
another_table_style[DocumentApp.Attribute.BACKGROUND_COLOR] = "#cfe2f3";
var another_table = body.appendTable(some_cells);
another_table.setAttributes(another_table_style);
答案 0 :(得分:2)
您需要注意文档 - 某些属性仅适用于某些元素。例如,填充枚举仅适用于表单元,而不是整个表。
要对整个表应用更改,可以遍历表格单元格并应用计算的填充(或静态)。
奖金1 - 不确定。工作表中的属性在Range
元素上单独设置。
Bonus 2 - 列是行的子项。因此,要迭代,您需要使用两个循环。您可以使用枚举设置TABLE_CELL
元素的背景。
function table() {
var doc = DocumentApp.getActiveDocument();
var body = doc.getBody();
var cells = [['Row 1.1', 'Row 1.2'], ['Row 2.1','Row 2.2']];
var header_table = body.insertTable(0, cells);
var styles = {};
styles[DocumentApp.Attribute.PADDING_BOTTOM] = 20; // only applies to table cells
styles[DocumentApp.Attribute.BACKGROUND_COLOR] = "#00ffff"
Logger.log(header_table.getType());
var rows = header_table.getNumRows();
Logger.log(rows); // check the number of rows in your table
// for each row...
for(var i=0; i<rows; i++) {
// for each column...
var cols = header_table.getRow(i).getNumChildren();
for(var j=0; j<cols; j++) {
var cell = header_table.getRow(i).getCell(j);
// Set the TableCell attributes to each
cell.setAttributes(styles)
}
}
}
我测试了MARGIN
枚举,我认为它们仅适用于文档Body
,这与文档略有不同。
function setMargins() {
var body = DocumentApp.getActiveDocument().getBody();
var margins = {};
margins[DocumentApp.Attribute.MARGIN_TOP] = 150;
margins[DocumentApp.Attribute.MARGIN_LEFT] = 150;
// uncomment the next line to set margins on the document body.
// body.setAttributes(margins);
// this returns all text elements in the doc, even those in tables
var pars = body.getParagraphs();
// According to the docs, this should work, but it doesn't.
for(var i=0; i<pars.length; i++) {
pars[i].setAttributes(margins);
}
}