谷歌应用程序脚本 - 搜索和替换谷歌文档上的文本

时间:2015-06-20 16:04:14

标签: google-apps-script google-apps

我使用以下代码替换google docs上的文字:

var sampleDoc = DocumentApp.openById(copyId),
var docBody = sampleDoc.getBody();  
docBody.replaceText('%sample_placeholder%','some text');

一切正常,但这次我需要在图片上方放置文字,所以基本上我在%sample_placeholder%上插入Text Box {1}}。上面的代码不再有效。

有关如何在文本框中搜索和替换文字的任何想法吗?

提前致谢!

可用的任何解决方法?

其他信息: 要放在图像上的文本来自用户输入。图像实际上是一个矩形标签标签框(用于标记事物),文本可放入其中间的空间。

我们的想法是,图片上带有图片和文字的Google文档(让我们将文字称为文字占位符)将作为模板。此Google文档模板正在由Google Apps脚本进行重新复制,并应使用来自用户的输入替换文本占位符,并将其另存为单独的文件。

它看起来像这样(我得到了设计师创建的图像),文本将放在图像的中间。 enter image description here

2 个答案:

答案 0 :(得分:2)

由于没有对Google绘图的脚本访问权限,因此无法在图像上方添加文本。您可以尝试一种可能的解决方法。

如果只有少数可能的图像/文本组合,一种解决方案是为每种可能的组合创建一个图像并将其托管在一个文件夹中。然后,您只需使用适当的文本获取图像并插入即可。

我以前自己用过这个(共有20到30个图像组合)。这里是我在上面与你的拼凑之前使用过的一些代码:

function getImage(imageName, copyId){
  var sampleDoc = DocumentApp.openById(copyId);
  var docBody = sampleDoc.getBody();
  var imageDest = //pick element which can accept image (table cell, paragraph, etc);

  imageFolder = DriveApp.getFolderById('Your_folder_ID_here');
  image = imageFolder.getFilesByName(imageName).next().getAs('image/png');
  imageDest.insertInlineImage(0, image);
}

注意:图像名称应与文件夹ex:“image1_Text1.png”,“image1_Text2.png”等中的名称相匹配。只需确保您的图像名称a易于理解,而无需查看图像。

最困难的部分是为图像找到合适的插入点,因为文档结构很快就会变得棘手。为了解决这个问题,我编写了一个小实用程序脚本来获取文档的子元素,以帮助更好地理解底层结构。随意使用它:

function getDocElements() {
  var doc = DocumentApp.openById(copyId),
      body = doc.getBody(),
      numElements = doc.getNumChildren(),
      elements = [];

  for (var i = 0; i < numElements; ++i){
      var element = doc.getChild(i),
          type = element.getType();
    Logger.log(i + " : "+type);}
}

虽然这是一种解决方法,但只要您拥有有限数量的潜在图像/文本组合,它就可以让您创建所需的效果。

答案 1 :(得分:0)

使用DocumentApp而不是SlideApp并使用ReplaceAllText函数。之后saveAndClose()文档。

相关问题