Google sheets/doc - table 自定义 - 条带化
Google sheets/doc - table customisations - banding
慢慢学习如何使用 google 应用程序脚本在 sheet 和文档上进行一些基本编码。
目前正在根据 sheet 中收集的信息创建动态报告生成器,但在尝试自定义从表格到文档的 table 时遇到了麻烦。
我正在尝试在文档中对我的 table 应用条带(交替行颜色)以使其看起来更专业和干净,我尝试在很多地方寻找但似乎找不到任何东西有效或者我至少可以理解。
创建文件等没有问题,而且非常简单我已经添加了上下文代码。
function reportgenerator() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('SHEETNAME');
//name for new file
var firstname = sheet.getRange(2,1).getValue();
var reportname = firstname+"'s Report";
//creating document
const googleDocTemplate = DriveApp.getFileById('FILEID');
const destinationFolder = DriveApp.getFolderById('FOLDERID');
const copy = googleDocTemplate.makeCopy(reportname,destinationFolder);
const doc = DocumentApp.openById(copy.getId());
const body = doc.getBody();
我觉得我的问题可能源于以下代码部分,我从中提取数据的范围非常动态,table 中的行数可能是 20到 60+,因此使用 getDataRegion。
// data range for table
var tablerange = sheet.getRange(25,9).getDataRegion();
var tablevalues = tablerange.getValues();
// table style
var tablestyle = {};
tablestyle[DocumentApp.Attribute.FONT_FAMILY] = 'Arial';
tablestyle[DocumentApp.Attribute.FONT_SIZE] = 11;
tablestyle[DocumentApp.Attribute.BORDER_COLOR] = '#ffffff';
tablestyle[DocumentApp.Attribute.BACKGROUND_COLOR] = '#cccccc';
// replace text with table
var rgel = body.findText('{{answertable}}');
var element = rgel.getElement();
var childIndex = body.getChildIndex(element.getParent());
body.getChild(childIndex).asText().setText('');
body.insertTable(childIndex,tablevalues).setAttributes(tablestyle).setColumnWidth(2,55);
doc.saveAndClose();
}
我所做的只是为文本的背景着色,这不符合我的要求,如前所述,我希望对整行应用条带,然后每隔一秒应用一次,我不熟悉如何使用“for”并创建一个循环以某种方式在 cells/rows 中读取和着色?但是我非常不熟悉使用“for”。
也有一个 header,但同样处理样式和将其与其他单元格隔离开来对我来说是个问题。
任何帮助将不胜感激,避免我的头撞到砖墙上。
我相信你的目标如下。
您想通过使用 Google Apps 脚本从 Google Spreadsheet 检索的值在 Google 文档上实现以下情况。
在这种情况下,首先创建 table。然后,每一行的背景颜色都会改变。
示例脚本:
请设置 spreadsheetId
、documentId
和 sheet 名称。
function myFunction() {
var spreadsheetId = "###"; // Please set the Spreadsheet ID.
var documentId = "###"; // Please set the Document ID.
var tablevalues = SpreadsheetApp.openById(spreadsheetId).getSheetByName("Sheet1").getDataRange().getDisplayValues();
var body = DocumentApp.openById(documentId).getBody(); // Or please use your "body".
var tablestyle = {};
tablestyle[DocumentApp.Attribute.FONT_FAMILY] = 'Arial';
tablestyle[DocumentApp.Attribute.FONT_SIZE] = 11;
tablestyle[DocumentApp.Attribute.BORDER_COLOR] = '#ffffff';
var rgel = body.findText('{{answertable}}');
var element = rgel.getElement();
var childIndex = body.getChildIndex(element.getParent());
body.getChild(childIndex).asText().setText('');
var table = body.insertTable(childIndex, tablevalues).setAttributes(tablestyle).setColumnWidth(2, 55);
for (var r = 0; r < table.getNumRows(); r++) {
var row = table.getRow(r);
for (var c = 0; c < row.getNumCells(); c++) {
if (r == 0) {
row.getCell(c).setBackgroundColor('#008000');
} else if (r % 2 == 0) {
row.getCell(c).setBackgroundColor('#cccccc');
}
}
}
}
- 在此示例中,
#008000
和 #cccccc
用作颜色。所以请根据您的实际情况修改颜色。
参考文献:
慢慢学习如何使用 google 应用程序脚本在 sheet 和文档上进行一些基本编码。
目前正在根据 sheet 中收集的信息创建动态报告生成器,但在尝试自定义从表格到文档的 table 时遇到了麻烦。
我正在尝试在文档中对我的 table 应用条带(交替行颜色)以使其看起来更专业和干净,我尝试在很多地方寻找但似乎找不到任何东西有效或者我至少可以理解。
创建文件等没有问题,而且非常简单我已经添加了上下文代码。
function reportgenerator() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('SHEETNAME');
//name for new file
var firstname = sheet.getRange(2,1).getValue();
var reportname = firstname+"'s Report";
//creating document
const googleDocTemplate = DriveApp.getFileById('FILEID');
const destinationFolder = DriveApp.getFolderById('FOLDERID');
const copy = googleDocTemplate.makeCopy(reportname,destinationFolder);
const doc = DocumentApp.openById(copy.getId());
const body = doc.getBody();
我觉得我的问题可能源于以下代码部分,我从中提取数据的范围非常动态,table 中的行数可能是 20到 60+,因此使用 getDataRegion。
// data range for table
var tablerange = sheet.getRange(25,9).getDataRegion();
var tablevalues = tablerange.getValues();
// table style
var tablestyle = {};
tablestyle[DocumentApp.Attribute.FONT_FAMILY] = 'Arial';
tablestyle[DocumentApp.Attribute.FONT_SIZE] = 11;
tablestyle[DocumentApp.Attribute.BORDER_COLOR] = '#ffffff';
tablestyle[DocumentApp.Attribute.BACKGROUND_COLOR] = '#cccccc';
// replace text with table
var rgel = body.findText('{{answertable}}');
var element = rgel.getElement();
var childIndex = body.getChildIndex(element.getParent());
body.getChild(childIndex).asText().setText('');
body.insertTable(childIndex,tablevalues).setAttributes(tablestyle).setColumnWidth(2,55);
doc.saveAndClose();
}
我所做的只是为文本的背景着色,这不符合我的要求,如前所述,我希望对整行应用条带,然后每隔一秒应用一次,我不熟悉如何使用“for”并创建一个循环以某种方式在 cells/rows 中读取和着色?但是我非常不熟悉使用“for”。
也有一个 header,但同样处理样式和将其与其他单元格隔离开来对我来说是个问题。
任何帮助将不胜感激,避免我的头撞到砖墙上。
我相信你的目标如下。
您想通过使用 Google Apps 脚本从 Google Spreadsheet 检索的值在 Google 文档上实现以下情况。
在这种情况下,首先创建 table。然后,每一行的背景颜色都会改变。
示例脚本:
请设置 spreadsheetId
、documentId
和 sheet 名称。
function myFunction() {
var spreadsheetId = "###"; // Please set the Spreadsheet ID.
var documentId = "###"; // Please set the Document ID.
var tablevalues = SpreadsheetApp.openById(spreadsheetId).getSheetByName("Sheet1").getDataRange().getDisplayValues();
var body = DocumentApp.openById(documentId).getBody(); // Or please use your "body".
var tablestyle = {};
tablestyle[DocumentApp.Attribute.FONT_FAMILY] = 'Arial';
tablestyle[DocumentApp.Attribute.FONT_SIZE] = 11;
tablestyle[DocumentApp.Attribute.BORDER_COLOR] = '#ffffff';
var rgel = body.findText('{{answertable}}');
var element = rgel.getElement();
var childIndex = body.getChildIndex(element.getParent());
body.getChild(childIndex).asText().setText('');
var table = body.insertTable(childIndex, tablevalues).setAttributes(tablestyle).setColumnWidth(2, 55);
for (var r = 0; r < table.getNumRows(); r++) {
var row = table.getRow(r);
for (var c = 0; c < row.getNumCells(); c++) {
if (r == 0) {
row.getCell(c).setBackgroundColor('#008000');
} else if (r % 2 == 0) {
row.getCell(c).setBackgroundColor('#cccccc');
}
}
}
}
- 在此示例中,
#008000
和#cccccc
用作颜色。所以请根据您的实际情况修改颜色。