使用工作表中的图表替换文本占位符

时间:2017-10-12 04:15:48

标签: javascript google-apps-script google-sheets google-docs

我有一个脚本应该用Google Sheet中的各种值填充Google Doc正文中的一系列占位符。我希望合并到模板中的一个对象是EmbeddedChartBuilder对象:

var chart = sheet.newChart()
                 .addRange(range)
                 .setChartType(Charts.ChartType.BAR)
                 .setPosition(i, 6, 0, 0)
                 .setOption('legend.position', 'none')
                 .setOption('height', 50)
                 .setOption('width', 700)
                 .setOption('colors', ['black', 'white'])
                 .setOption('hAxis.minValue', 0)
                 .setOption('hAxis.maxValue', 10)
                 .setOption('backgroundColor.fill', 'white')
                 .setOption('hAxis.gridlines.color', 'white')
                 .setOption('hAxis.gridlines.count', 0);
sheet.insertChart(chart.build());

合并代码如下:

body.replaceText('{name}', company.name);
body.replaceText('{score}', company.score);
body.replaceText('{applyTime}', company.applyTime);
body.replaceText('{confEmail}', company.confEmail);
body.replaceText('{mobiFriendly}', company.mobiFriendly);
body.replaceText('{chart}', chart);

最后一行body.replaceText('{chart}', chart);当然只是将文档中的占位符替换为" EmbeddedChartBuilder"。

有没有办法将图表作为图像或其他内容插入占位符?如果是这样,怎么样?

1 个答案:

答案 0 :(得分:1)

首先,在定义.build()变量的链末尾使用chart更合乎逻辑。毕竟,您想要插入图表,而不是图表构建器。

当然,尝试使用replaceText函数插入图表会将其强制转换为" EmbeddedChart"串。相反,请在适当的元素上使用appendInlineImageinsertInlineImage。我会使用前者,因为它更简单:它只是将图像附加到它应用的元素的末尾。

var chart = sheet.newChart()........build();
var found = body.findText('{chart}');
if (found) {
  found.getElement().getParent().appendInlineImage(chart);
  body.replaceText('{chart}', '');
}

这里,findText检索指向{chart}的RangeElement;然后我们得到包含该字符串的元素(Text),然后是它的Parent(可能是段落,但可能是ListItem等)。图像将附加到父级,最后使用replaceText删除字符串{chart}。

这假设字符串{chart}位于其元素的末尾(可能是它自己的段落)。