gpt4 book ai didi

google-apps-script - 替换 Google Doc 表中的文本以进行表单合并

转载 作者:行者123 更新时间:2023-12-02 00:14:36 26 4
gpt4 key购买 nike

我正在尝试通过填写表格来生成自动报告。脚本从电子表格的最后一行读出数据。然后将报告制作为 Google 文档。这里文档中的一些标签显示了项目应该在的位置。 %meterx% 用于米。

这些可以是图像或文本。对于普通段落,这在类型 = 段落的第一个循环中工作正常。但它会跳过表格。我需要用图像替换表格单元格中的 %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 !! :)

最佳答案

TableRow 包含类型为 TableCell 的子元素,后者也包含子元素。如果它们为空白或包含文本,则为 PARAGRAPH 类型。

您可以使用 getText() 访问 TableCell 中的文本,但最好先确认单元格是否包含文本。

下面的代码处理 PARAGRAPHTABLE 元素类型,对于表格,它探索 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%)
...

关于google-apps-script - 替换 Google Doc 表中的文本以进行表单合并,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13869576/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com