1

我正在尝试使用 Google Apps 脚本将文本替换为文档模板并将其保存为 .pdf。我大多是成功的,但我有一个问题。我想让脚本在模板中搜索文本,用提供的文本替换文本,使用项目符号。它将忽略可能已放入文本中的任何额外 \n。这是一个示例文本:

Today was a good day.
Tomorrow will be a good day.

Yesterday was a decent day.

在我的文档中,我希望将文本替换_text_为一行:Comments: _text_. 最终,应该打印出以下内容:

Comments:
- Today was a good day.
- Tomorrow will be a good day.
- Yesteday was a decent day.

这是我到目前为止的代码,但它运行得不太好。如果有人可以提供任何帮助,将不胜感激。

var listr = "";
var trunc = text.split("\n"); \\ where text is to be placed into the template
var index = b.findText("_text_").getStartOffset(); \\ var b is getBody()
for (var j = (trunc.length - 1); j >= 0; j--)
  if(!trunc[j].equals("")) b.insertListItem(index, trunc[j]);
b.replaceText("_text_", "");

任何帮助将非常感激。我很难理解 Google Docs 中索引的概念。谢谢你。


你好。只是想让你知道我最终是如何实现这个的:

var trunc = text.split("\n"); \\where text is to be placed into the template
var index = b.getChildIndex(b.findText("foo").getElement().getParent()) + 1;
for (var j = (trunc.length - 1); j >= 0; j--)
  if (trunc[j] != "") b.insertListItem(index, trunc[j]);

希望有帮助。它将元素向后推回彼此。

4

1 回答 1

0

好吧,这个粗略的代码似乎插入到包含 TEXT 的 PARAGRAPH 的开头,这似乎是一个单独的子元素。可能只有当文本不在子表、子列表等中时,此特定代码才有效……但也许它会有所帮助。

var element = DocumentApp.create('newDoc').getBody()
  .appendListItem('testing').copy();
var index = b.getChildIndex(
  b.findText('_text_').getElement().getParent().asParagraph() );
b.insertListItem(index, element);

我度过了漫长的一天,也许我以后可以改进它,主要是我认为缺少的是 getChildIndex() 函数。同样使用 newDoc, insertListItem() 有一些奇怪的“必须分离元素”。直到我使用 .copy() 之前的消息,所以在那里注意。

于 2013-09-26T05:33:07.343 回答