我正在尝试通过填写表单来制作自动报告。脚本从最后一个电子表格行读出数据。然后该报告将作为Google Doc。这里文档中的一些标签显示了项目的位置。 %meterx%
适用于米。
这些可以是图像或文字。对于普通段落,这适用于第一个循环,其中type = paragraph。但它会跳过表格。我需要用图像替换表格单元格中的%meterx%
,就像我对段落一样,但是我仍然坚持使用代码查看表格。
我看到了一些替换文字的方法,但这似乎是用图像替换它的唯一方法。
var totalElements = doc.getNumChildren();
var el=[]
for( var j = 0; j < totalElements; ++j ) {
var element = doc.getChild(j);
var type = element.getType();
if (type =='PARAGRAPH'){
el[j]=element.getText()
if(el[j]=='%meter3%'){element.removeFromParent();
var newimage = UrlFetchApp.fetch('http://chart.googleapis.com/chart?chf=bg,s,67676700&chs=280x150&cht=gm&chds=0,10&chd=t:'+row[4]+'&chdlp=b').getBlob();
doc.insertImage(j, newimage);
if (type =='TABLE'){
var tablerows=element.getNumRows();
Logger.log(tablerows);
for ( var i = 0; i < tablerows; ++i ) {
var tablerow = element.getRow(0)
Logger.log(tablerow); // <--- gives TableRow
} /// STUCK !! :)
答案 0 :(得分:3)
TableRow
包含类型为TableCell
的子元素,它们也包含子元素。如果它们是空白或包含文本,则为PARAGRAPH
类型。
您可以使用TableCell
访问getText()
中的文字,但最好先确认该单元格是否包含文字。
下面的代码处理PARAGRAPH
和TABLE
元素类型,对于表格,它会探索TABLECELL
元素。我不知道你在使用数组el[]
做了什么,所以我把它遗漏了,并且还注释了图像替换代码 - 相反,我只是记录了数组的结构和内容。表的插图。要完成目标,您应该使用相同的匹配项替换日志记录。替换PARAGRAPH
的行为。
注意:我使用了一些未在此处详述的辅助函数,这些函数应该是不言自明的,getFileByName_()
和elementTypeToText_()
。
function Q13869576() {
var folder = "StackOverflow";
var docname = "Q13869576.gdoc";
var docId = getFileByName_(folder, docname).getId();
var doc = DocumentApp.openById(docId);
var docBody = doc.getActiveSection();
var totalElements = doc.getNumChildren();
var el=[]
for( var j = 0; j < totalElements; ++j ) {
var element = doc.getChild(j);
var type = element.getType();
switch (type) {
case DocumentApp.ElementType.PARAGRAPH:
el[j]=element.getText()
if(el[j]=='%meter3%'){
Logger.log( "Found tag in paragraph" );
// element.removeFromParent();
// var newimage = UrlFetchApp.fetch('http://chart.googleapis.com/chart?chf=bg,s,67676700&chs=280x150&cht=gm&chds=0,10&chd=t:'+row[4]+'&chdlp=b').getBlob();
// doc.insertImage(j, newimage);
}
break;
case DocumentApp.ElementType.TABLE:
var tablerows=element.getNumRows();
Logger.log(tablerows);
for ( var row = 0; row < tablerows; ++row ) {
var tablerow = element.getRow(row)
for ( var cell=0; cell < tablerow.getNumCells(); ++cell) {
Logger.log( "Table Row("+row+") Cell ("+cell+")");
Logger.log(
elementTypeToText_(tablerow.getChild(cell).getType())
+" with child type "
+elementTypeToText_(tablerow.getChild(cell).getChild(0).getType()));
var celltext = tablerow.getChild(cell).getText();
Logger.log( "Text is ("+celltext+")" );
}
}
break;
}
}
}
这是示例文档中日志的摘录,其中包含一个包含%meter3%
标记的单元格的表格:
...
Table Row(1) Cell (2)
TABLE_CELL with child type PARAGRAPH
Text is (%meter3%)
...